0 = timestamp unban } // class joueur class vote { var $yes; var $no; var $total; var $nb_votes_needed; var $type; //** truc **// var $login; } // class vote class jfreu_command { var $name; var $help; var $isadmin; } // class jfreu_command include('plugins/jfreu.chat.php'); // called @ onStartup function init_jfreu($aseco, $command) { include_once('includes/jfreu.config.php'); $version = '0.14'; $aseco->server->jfreu = new Jfreu(); $aseco->server->jfreu->version = $version; $aseco->server->jfreu->conf_file = $conf_file; $aseco->server->jfreu->vips_file = $vips_file; $aseco->server->jfreu->bans_file = $bans_file; $aseco->server->jfreu->servername = $servername; $aseco->server->jfreu->top = $top; $aseco->server->jfreu->autochangename = ($autochangename != 0); // insure boolean $aseco->server->jfreu->autorank = ($autorank != 0); // insure boolean $aseco->server->jfreu->ranklimit = ($ranklimit != 0); // insure boolean $aseco->server->jfreu->limit = $limit; $aseco->server->jfreu->autolimit = $limit; $aseco->server->jfreu->hardlimit = $hardlimit; $aseco->server->jfreu->offset = $offset; $aseco->server->jfreu->autorankvip = ($autorankvip != 0); // insure boolean $aseco->server->jfreu->autorankminplayers = $autorankminplayers; $aseco->server->jfreu->maxplayers = $maxplayers; $aseco->server->jfreu->kickhirank = ($kickhirank != 0); // insure boolean $aseco->server->jfreu->player_join = $player_join; $aseco->server->jfreu->player_joins = $player_joins; $aseco->server->jfreu->player_left = $player_left; //** colors **// $whi = $aseco->server->jfreu->white = $aseco->formatColors('$z$s{#highlite}'); $yel = $aseco->server->jfreu->yellow = $aseco->formatColors('$z$s{#server}'); $red = $aseco->server->jfreu->red = $aseco->formatColors('$z$s{#error}'); $blu = $aseco->server->jfreu->blue = $aseco->formatColors('$z$s{#message}'); $gre = $aseco->server->jfreu->green = $aseco->formatColors('$z$s{#record}'); $adm = $aseco->server->jfreu->admin = $aseco->formatColors('$z$s{#logina}'); //** random information messages **// $aseco->server->jfreu->infomessages = $infomessages; $aseco->server->jfreu->message_start = $message_start; $i = 1; while (isset(${'message'.$i}) && $i < 1000) { $aseco->server->jfreu->messages[$i] = ${'message'.$i}; $i++; } if ($i != 1000) { $aseco->server->jfreu->nbmessages = $i - 1; } else // info message overload { $aseco->server->jfreu->nbmessages = 0; } //** playerlist **// foreach ($aseco->server->players->player_list as $pl) ajouter_joueur_liste($aseco, $pl->login, false, false); //** badwords **// $aseco->server->jfreu->badwords = ($badwords != 0); // insure boolean $aseco->server->jfreu->badwordsban = ($badwordsban != 0); // insure boolean $aseco->server->jfreu->badwordsnum = $badwordsnum; $aseco->server->jfreu->badwordstime = $badwordstime; $aseco->server->jfreu->badwordslist = $badwordslist; //** BAD BAD BAD **// $aseco->server->jfreu->pf = 0; // $aseco->server->jfreu->pf_list['barcelona'] = 302880; //** Votes **// $aseco->server->jfreu->vote_item = new vote(); $aseco->server->jfreu->vote_item->login = ''; $aseco->server->jfreu->vote_item->yes = 0; $aseco->server->jfreu->vote_item->no = 0; $aseco->server->jfreu->vote_item->total = 0; $aseco->server->jfreu->vote_item->type = ''; $aseco->server->jfreu->vote_item->nb_votes_needed = 0; $aseco->server->jfreu->current_vote = false; //** novote **// $aseco->server->jfreu->novote = ($novote != 0); // insure boolean $aseco->server->jfreu->unspecvote = ($unspecvote != 0); // insure boolean //** init jfreu admin commands **// $aseco->server->jfreu->admin_commands = array(); init_jfreu_admin_commands($aseco); //** Permanent VIP & VIP_Team **// $aseco->server->jfreu->vip_list = array(); $aseco->server->jfreu->vip_team_list = array(); read_lists_xml($aseco); read_guest_list($aseco); //** Temporary bans **// read_bans_xml($aseco); //** Loaded message **// $message = $yel.'>> '.$whi.'Jfreu'.$blu.'\'s plugin '.$yel.$version.$blu.': '.$whi.'Loaded'.$blu.'.'; $aseco->client->query('ChatSendServerMessage', $message); // start rank limiting set_ranklimit($aseco, $aseco->server->jfreu->autolimit, $autorank); // pass $autorank as integer //** disabled up-to-date test, superseded in main system - Xymph **// // $aseco->client->query('ChatSendServerMessage', up_to_date($aseco)); } // init_jfreu function write_lists_xml($aseco) { $lists = '' . CRLF . "" . CRLF; $lists .= "\t" . CRLF; $nb = count($aseco->server->jfreu->vip_list); $i = 0; $empty = true; while ($i < $nb) { if ($aseco->server->jfreu->vip_list[$i] != '') { $lists .= "\t\t" . $aseco->server->jfreu->vip_list[$i] . "" . CRLF; $empty = false; } $i++; } if ($empty) { $list .= "" . CRLF; } $lists .= "\t" . CRLF . CRLF . "\t" . CRLF; $nb = count($aseco->server->jfreu->vip_team_list); $i = 0; $empty = true; while ($i < $nb) { if ($aseco->server->jfreu->vip_team_list[$i] != '') { $lists .= "\t\t" . $aseco->server->jfreu->vip_team_list[$i] . "" . CRLF; $empty = false; } $i++; } if ($empty) { $list .= "" . CRLF; } $lists .= "\t" . CRLF . "" . CRLF; //** write out XML file **// if (!@file_put_contents($aseco->server->jfreu->vips_file, $lists)) { trigger_error('Could not write Jfreu vips file ' . $aseco->server->jfreu->vips_file . ' !', E_USER_WARNING); } } // write_lists_xml function read_lists_xml($aseco) { if (!file_exists($aseco->server->jfreu->vips_file)) { trigger_error('Could not find Jfreu vips file ' . $aseco->server->jfreu->vips_file . ' !', E_USER_WARNING); return false; } if (!$list = $aseco->xml_parser->parseXml($aseco->server->jfreu->vips_file)) { trigger_error('Could not read/parse Jfreu vips file ' . $aseco->server->jfreu->vips_file . ' !', E_USER_WARNING); return false; } $vip = $list['LISTS']['VIP_LIST'][0]; $vip_team = $list['LISTS']['VIP_TEAM_LIST'][0]; // update VIP_List if (isset($vip['LOGIN'])) { for ($i = 0; $i < count($vip['LOGIN']); $i++) { if (!in_array($vip['LOGIN'][$i], $aseco->server->jfreu->vip_list)) { $aseco->server->jfreu->vip_list[] = $vip['LOGIN'][$i]; } } } // update VIP_Team_List if (isset($vip_team['TEAM'])) { for ($i = 0; $i < count($vip_team['TEAM']); $i++) { if (!in_array($vip_team['TEAM'][$i], $aseco->server->jfreu->vip_team_list)) { $aseco->server->jfreu->vip_team_list[] = $vip_team['TEAM'][$i]; } } } } // read_lists_xml function read_guest_list($aseco) { // get guests on the server (hardlimited to 300) if ($aseco->client->query('GetGuestList', 300, 0)) { $guests = $aseco->client->getResponse(); foreach ($guests as $player) { if ($player['Login'] != '' && !in_array($player['Login'], $aseco->server->jfreu->vip_list)) { $aseco->server->jfreu->vip_list[] = $player['Login']; } } } } // read_guest_list function write_config_xml($aseco) { $config = '' . CRLF . "" . CRLF; $config .= "\t" . CRLF; $config .= "\t\t" . $aseco->server->jfreu->servername . "" . CRLF; $config .= "\t\t" . $aseco->server->jfreu->top . "" . CRLF; $config .= "\t\t" . ($aseco->server->jfreu->autochangename ? "true" : "false") . "" . CRLF; $config .= "\t\t" . $aseco->server->jfreu->infomessages . "" . CRLF; $config .= "\t\t" . ($aseco->server->jfreu->badwords ? "true" : "false") . "" . CRLF; $config .= "\t\t" . ($aseco->server->jfreu->badwordsban ? "true" : "false") . "" . CRLF; $config .= "\t\t" . $aseco->server->jfreu->badwordsnum . "" . CRLF; $config .= "\t\t" . $aseco->server->jfreu->badwordstime . "" . CRLF; $config .= "\t\t" . ($aseco->server->jfreu->unspecvote ? "true" : "false") . "" . CRLF; $config .= "\t\t" . ($aseco->server->jfreu->novote ? "true" : "false") . "" . CRLF; $config .= "\t" . CRLF . CRLF . "\t" . CRLF; $config .= "\t\t" . ($aseco->server->jfreu->ranklimit ? "true" : "false") . "" . CRLF; $config .= "\t\t" . $aseco->server->jfreu->limit . "" . CRLF; $config .= "\t\t" . $aseco->server->jfreu->hardlimit . "" . CRLF; $config .= "\t\t" . ($aseco->server->jfreu->autorank ? "true" : "false") . "" . CRLF; $config .= "\t\t" . $aseco->server->jfreu->offset . "" . CRLF; $config .= "\t\t" . $aseco->server->jfreu->autolimit . "" . CRLF; $config .= "\t\t" . $aseco->server->jfreu->autorankminplayers . "" . CRLF; $config .= "\t\t" . ($aseco->server->jfreu->autorankvip ? "true" : "false") . "" . CRLF; $config .= "\t\t" . $aseco->server->jfreu->maxplayers . "" . CRLF; $config .= "\t\t" . ($aseco->server->jfreu->kickhirank ? "true" : "false") . "" . CRLF; $config .= "\t\t" . ($aseco->server->jfreu->pf ? $aseco->server->jfreu->pf : '0') . "" . CRLF; $config .= "\t" . CRLF . "" . CRLF; //** write out XML file **// if (!@file_put_contents($aseco->server->jfreu->conf_file, $config)) { trigger_error('Could not write Jfreu config file ' . $aseco->server->jfreu->conf_file . ' !', E_USER_WARNING); } } // write_config_xml function read_config_xml($aseco) { if (!file_exists($aseco->server->jfreu->conf_file)) { trigger_error('Could not find Jfreu config file ' . $aseco->server->jfreu->conf_file . ' !', E_USER_WARNING); return false; } if (!$config = $aseco->xml_parser->parseXml($aseco->server->jfreu->conf_file)) { trigger_error('Could not read/parse Jfreu config file ' . $aseco->server->jfreu->conf_file . ' !', E_USER_WARNING); return false; } $server = $config['CONFIG']['SERVER'][0]; $limits = $config['CONFIG']['LIMITS'][0]; $aseco->server->jfreu->servername = $server['SERVERNAME'][0]; $aseco->server->jfreu->top = $server['SERVERTOP'][0]; $aseco->server->jfreu->autochangename = (strtolower($server['AUTOCHANGENAME'][0]) == 'true' ? true : false); $aseco->server->jfreu->infomessages = $server['INFOMESSAGES'][0]; $aseco->server->jfreu->badwords = (strtolower($server['BADWORDS'][0]) == 'true' ? true : false); $aseco->server->jfreu->badwordsban = (strtolower($server['BADWORDSBAN'][0]) == 'true' ? true : false); $aseco->server->jfreu->badwordsnum = $server['BADWORDSNUM'][0]; $aseco->server->jfreu->badwordstime = $server['BADWORDSTIME'][0]; $aseco->server->jfreu->unspecvote = (strtolower($server['UNSPECVOTE'][0]) == 'true' ? true : false); $aseco->server->jfreu->novote = (strtolower($server['NOVOTE'][0]) == 'true' ? true : false); $aseco->server->jfreu->ranklimit = (strtolower($limits['RANKLIMIT'][0]) == 'true' ? true : false); $aseco->server->jfreu->limit = $limits['LIMIT'][0]; $aseco->server->jfreu->hardlimit = $limits['HARDLIMIT'][0]; $aseco->server->jfreu->autorank = (strtolower($limits['AUTORANK'][0]) == 'true' ? true : false); $aseco->server->jfreu->offset = $limits['OFFSET'][0]; $aseco->server->jfreu->autolimit = $limits['AUTOLIMIT'][0]; $aseco->server->jfreu->autorankminplayers = $limits['AUTORANKMINPLAYERS'][0]; $aseco->server->jfreu->autorankvip = (strtolower($limits['AUTORANKVIP'][0]) == 'true' ? true : false); $aseco->server->jfreu->maxplayers = $limits['MAXPLAYERS'][0]; $aseco->server->jfreu->kickhirank = (strtolower($limits['KICKHIRANK'][0]) == 'true' ? true : false); $aseco->server->jfreu->pf = $limits['PF'][0]; if ($aseco->server->jfreu->autochangename) { $limit = ($aseco->server->jfreu->autorank ? $aseco->server->jfreu->autolimit : $aseco->server->jfreu->limit); $servername = $aseco->server->jfreu->servername . $aseco->server->jfreu->top . $limit; $aseco->client->query('SetServerName', $servername); } } // read_config_xml function write_bans_xml($aseco) { $lists = '' . CRLF . "" . CRLF; $lists .= "\t" . CRLF; $time = time(); $empty = true; foreach ($aseco->server->jfreu->playerlist as $player => $entry) { if ($entry->banned > $time) { $lists .= "\t\t" . $player . " " . CRLF; $empty = false; } } if ($empty) { $list .= "" . CRLF; } $lists .= "\t" . CRLF . "" . CRLF; //** write out XML file **// if (!@file_put_contents($aseco->server->jfreu->bans_file, $lists)) { trigger_error('Could not write Jfreu bans file ' . $aseco->server->jfreu->bans_file . ' !', E_USER_WARNING); } } // write_bans_xml function read_bans_xml($aseco) { if (!file_exists($aseco->server->jfreu->bans_file)) { trigger_error('Could not find Jfreu bans file ' . $aseco->server->jfreu->bans_file . ' !', E_USER_WARNING); return false; } if (!$list = $aseco->xml_parser->parseXml($aseco->server->jfreu->bans_file)) { trigger_error('Could not read/parse Jfreu bans file ' . $aseco->server->jfreu->bans_file . ' !', E_USER_WARNING); return false; } // restore temporary bans $time = time(); $bans = $list['LISTS']['BAN_LIST'][0]; if (isset($bans['LOGIN'])) { for ($i = 0; $i < count($bans['LOGIN']); $i++) { // check if ban hasn't expired yet if ($bans['TIME'][$i] > $time) { ajouter_joueur_liste($aseco, $bans['LOGIN'][$i], false, false); $aseco->server->jfreu->playerlist[$bans['LOGIN'][$i]]->banned = $bans['TIME'][$i]; } } } } // read_bans_xml function chat_unspec($aseco, $command) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $login = $command['author']->login; if ($aseco->server->jfreu->unspecvote) { if ($aseco->server->jfreu->playerlist[$login]->speconly) { if (!$aseco->server->jfreu->current_vote) { new_vote($aseco, 'unspec', $login); } else { $message = $yel.'> '.$blu.'Wait until the end of the current vote.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } else { $message = $yel.'> '.$blu.'This command is only for SpecOnly players.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } else { $message = $yel.'> '.$whi.'/unspec'.$blu.' is not currently enabled on this server.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // chat_unspec function chat_yes($aseco, $command) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $login = $command['author']->login; if (!$aseco->server->jfreu->current_vote) { $message = $yel.'> '.$blu.'No current vote.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); return; } if ($aseco->server->jfreu->playerlist[$login]->speconly) { $message = $yel.'> '.$blu.'SpecOnly can\'t vote.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); return; } if ($aseco->server->jfreu->playerlist[$login]->hasvoted == 0) { vote_yes_no($aseco, true, false); $aseco->server->jfreu->playerlist[$login]->hasvoted = 1; $message = $yel.'> '.$blu.'You have voted '.$whi.'yes'.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } elseif ($aseco->server->jfreu->playerlist[$login]->hasvoted == 1) { $message = $yel.'> '.$blu.'You have already voted '.$whi.'yes'.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } elseif ($aseco->server->jfreu->playerlist[$login]->hasvoted == -1) { vote_yes_no($aseco, true, true); $aseco->server->jfreu->playerlist[$login]->hasvoted = 1; $message = $yel.'> '.$blu.'You change your vote to '.$whi.'yes'.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // chat_yes function chat_no($aseco, $command) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $login = $command['author']->login; if (!$aseco->server->jfreu->current_vote) { $message = $yel.'> '.$blu.'No current vote.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); return; } if ($aseco->server->jfreu->playerlist[$login]->speconly) { $message = $yel.'> '.$blu.'SpecOnly can\'t vote.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); return; } if ($aseco->server->jfreu->playerlist[$login]->hasvoted == 0) { vote_yes_no($aseco, false, false); $aseco->server->jfreu->playerlist[$login]->hasvoted = -1; $message = $yel.'> '.$blu.'You have voted '.$whi.'no'.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } elseif ($aseco->server->jfreu->playerlist[$login]->hasvoted == -1) { $message = $yel.'> '.$blu.'You have already voted '.$whi.'no'.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } elseif ($aseco->server->jfreu->playerlist[$login]->hasvoted == 1) { vote_yes_no($aseco, false, true); $aseco->server->jfreu->playerlist[$login]->hasvoted = -1; $message = $yel.'> '.$blu.'You change your vote to '.$whi.'no'.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // chat_no function vote_yes_no($aseco, $yes, $change) // change = true: Vote change (yes -> no | no -> yes) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; if ($aseco->server->jfreu->vote_item->nb_votes_needed == 0) { vote_end($aseco); return 0; } if ($yes) { $aseco->server->jfreu->vote_item->yes++; if ($change) { $aseco->server->jfreu->vote_item->no--; } } else { $aseco->server->jfreu->vote_item->no++; if ($change) { $aseco->server->jfreu->vote_item->yes--; } } if (!$change) { $aseco->server->jfreu->vote_item->total++; } if ($aseco->server->jfreu->vote_item->total >= $aseco->server->jfreu->vote_item->nb_votes_needed) { vote_finish($aseco); return; } $reste = $aseco->server->jfreu->vote_item->nb_votes_needed - $aseco->server->jfreu->vote_item->total; if ($reste > 0) { if ($aseco->server->jfreu->vote_item->type == 'unspec') { $player = $aseco->server->players->getPlayer($aseco->server->jfreu->vote_item->login); $message = $yel.'>> '.$whi.$reste.$blu.' vote'.($reste == 1 ? '' : 's').' left to unSpec '.$whi.clean_nick($player->nickname).$blu.'$n [ '.$gre.'$n/yes'.$blu.'$n | '.$red.'$n/no'.$blu.'$n ]'; } $aseco->client->query('ChatSendServerMessage', $message); } } // vote_yes_no function new_vote($aseco, $type, $login) // type = unspec { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $aseco->server->jfreu->vote_item->login = $login; $aseco->server->jfreu->vote_item->yes = 0; $aseco->server->jfreu->vote_item->no = 0; $aseco->server->jfreu->vote_item->total = 0; $aseco->server->jfreu->vote_item->type = $type; $aseco->server->jfreu->current_vote = true; $nbjoueurs = count($aseco->server->players->player_list); $aseco->server->jfreu->vote_item->nb_votes_needed = round($nbjoueurs / 4); $player = $aseco->server->players->getPlayer($login); // format ladder rank with narrow spaces between the thousands $rank = str_replace(' ', '$n $m', number_format($player->ladderrank, 0, ' ', ' ')); if ($type == 'unspec') { $message = $yel.'>> '.$blu.'SpecOnly '.$whi.clean_nick($player->nickname).$blu.' (Rank: '.$whi.$rank.$blu.') wants to join the race.' . LF . $yel.'>> '.$blu.'('.$gre.'/yes'.$blu.' | '.$red.'$i/no'.$blu.'): '.$whi.round($aseco->server->jfreu->vote_item->nb_votes_needed).$blu.' votes needed.'; $aseco->client->query('ChatSendServerMessage', $message); } foreach ($aseco->server->players->player_list as $pl) $aseco->server->jfreu->playerlist[$pl->login]->hasvoted = 0; } // new_vote function vote_finish($aseco) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; if ($aseco->server->jfreu->vote_item->type == 'unspec') { $login = $aseco->server->jfreu->vote_item->login; // check if player still online if ($player = $aseco->server->players->getPlayer($login)) { $nick = $player->nickname; $yes = $aseco->server->jfreu->vote_item->yes; $no = $aseco->server->jfreu->vote_item->no; $message = $yel.'>> '.$blu.'Vote result to unSpec '.$whi.clean_nick($nick).$blu.': '.$whi.$yes.$blu.' yes, '.$whi.$no.$blu.' no.'; $aseco->client->query('ChatSendServerMessage', $message); if ($yes > $no) { $aseco->server->jfreu->playerlist[$login]->speconly = false; $aseco->server->jfreu->playerlist[$login]->isvip = true; $message = $yel.'>> '.$blu.'The server unSpecs '.$whi.clean_nick($nick).$blu.'.'; $aseco->client->query('ChatSendServerMessage', $message); if ($aseco->server->jfreu->autorank) { autorank($aseco, $command); } } else { $message = $yel.'>> '.$blu.'The server banned '.$whi.clean_nick($nick).$blu.' for '.$whi.'5'.$blu.' mins.'; $aseco->client->query('ChatSendServerMessage', $message); banfor($aseco, $login, 5); } } } $aseco->server->jfreu->vote_item->login = ''; $aseco->server->jfreu->vote_item->yes = 0; $aseco->server->jfreu->vote_item->no = 0; $aseco->server->jfreu->vote_item->total = 0; $aseco->server->jfreu->vote_item->nb_votes_needed = 0; $aseco->server->jfreu->current_vote = false; $aseco->server->jfreu->type = ''; foreach ($aseco->server->players->player_list as $pl) $aseco->server->jfreu->playerlist[$pl->login]->hasvoted = 0; } // vote_finish // called @ onEndRace function vote_end($aseco) { if ($aseco->server->jfreu->current_vote) { $aseco->server->jfreu->vote_item->login = ''; $aseco->server->jfreu->vote_item->yes = 0; $aseco->server->jfreu->vote_item->no = 0; $aseco->server->jfreu->vote_item->total = 0; $aseco->server->jfreu->vote_item->type = ''; $aseco->server->jfreu->vote_item->nb_votes_needed = 0; $aseco->server->jfreu->current_vote = false; } } // vote_end function ajouter_joueur_liste($aseco, $login, $isvip, $speconly) { if (!isset($aseco->server->jfreu->playerlist[$login])) { $aseco->server->jfreu->playerlist[$login] = new joueur(); $aseco->server->jfreu->playerlist[$login]->badwords = 0; $aseco->server->jfreu->playerlist[$login]->hasvoted = 0; $aseco->server->jfreu->playerlist[$login]->banned = 0; } $aseco->server->jfreu->playerlist[$login]->isvip = $isvip; $aseco->server->jfreu->playerlist[$login]->speconly = $speconly; $aseco->server->jfreu->playerlist[$login]->kicked = false; } // ajouter_joueur_liste function banfor($aseco, $login, $time) // time: mins { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; // format time value if ($time > 60) { // check for >1 hour $ban = sprintf("%d ${red}hour%s ${whi}%02d ${red}min%s", $time / 60, (floor($time / 60) == 1 ? '' : 's'), $time % 60, (($time % 60) == 1 ? '' : 's')); } else { $ban = sprintf('%d%s min%s', $time, $red, ($time == 1 ? '' : 's')); } // notify/kick banned player if (still) online $found = false; foreach ($aseco->server->players->player_list as $pl) { if ($pl->login == $login) { $message = $yel.'> '.$red.'You have been Banned for '.$whi.$ban.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); $aseco->client->addCall('Kick', array($login)); $found = true; break; } } if (!$found) ajouter_joueur_liste($aseco, $login, false, false); // log console message $aseco->console('[BanFor] player "{1}" banned for {2}', $login, stripColors($ban)); $absolute_time = time() + $time * 60; $aseco->server->jfreu->playerlist[$login]->banned = $absolute_time; $aseco->server->jfreu->playerlist[$login]->kicked = true; // update XML file write_bans_xml($aseco); } // banfor function isbanned($aseco, $login) // return mins left = banned, return 0 = not banned { if (!isset($aseco->server->jfreu->playerlist[$login])) { return 0; } if ($aseco->server->jfreu->playerlist[$login]->banned == 0) { return 0; } $time = time(); if ($aseco->server->jfreu->playerlist[$login]->banned > $time) { return round(($aseco->server->jfreu->playerlist[$login]->banned - $time) / 60); } else { $aseco->server->jfreu->playerlist[$login]->banned = 0; return 0; } } // isbanned function kicker_login($aseco, $login) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $aseco->server->jfreu->playerlist[$login]->kicked = true; $message = $yel.'> '.$red.'You\'ve been Kicked. Bye!'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); $aseco->client->addCall('Kick', array($login)); } // kicker_login function isvip($aseco, $login) { if ($aseco->server->jfreu->playerlist[$login]->isvip || in_array($login, $aseco->server->jfreu->vip_list)) { return true; } return false; } // isvip // called @ onPlayerConnect function player_connect($aseco, $player) { global $rasp, $feature_ranks; $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; // abbreviate long nations $nation = $player->nation; if (strlen($nation) > 14) $nation = mapCountry($nation); /* disabled spammy Loaded message - Xymph $welcome = $yel.'>> '.$whi.'Jfreu'.$blu.'\'s plugin '.$gre.$aseco->server->jfreu->version.$blu.': '.$whi.'Loaded'.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $welcome, $player->login); disabled */ if ($ban = isbanned($aseco, $player->login)) { $title = $aseco->isMasterAdmin($player) ? $adm.$aseco->titles['MASTERADMIN'][0] : ($aseco->isAdmin($player) ? $adm.$aseco->titles['ADMIN'][0] : ($aseco->isOperator($player) ? $adm.$aseco->titles['OPERATOR'][0] : $blu.'New Player')); // format ladder rank with narrow spaces between the thousands $rank = str_replace(' ', '$n $m', number_format($player->ladderrank, 0, ' ', ' ')); // format time value if ($ban > 60) { // check for >1 hour $ban = sprintf("%d ${red}hour%s ${whi}%02d ${red}min%s", $ban / 60, (floor($ban / 60) == 1 ? '' : 's'), $ban % 60, (($ban % 60) == 1 ? '' : 's')); } else { $ban = sprintf('%d%s min%s', $ban, $red, ($ban == 1 ? '' : 's')); } $message = $yel.'>> '.$title.': '.$whi.clean_nick($player->nickname).$blu.' Nation: '.$whi.$nation.$blu.' Ladder: '.$whi.$rank.$blu.' ['.$red.'Banned for '.$whi.$ban.$blu.']'; $aseco->client->query('ChatSendServerMessage', $message); $message2 = $yel.'> '.$red.'Your ban will be over in '.$whi.$ban.'!'; $aseco->client->query('ChatSendServerMessageToLogin', $message2, $player->login); $aseco->server->jfreu->playerlist[$player->login]->kicked = true; $aseco->client->addCall('Kick', array($player->login)); return 0; } if ($aseco->server->jfreu->ranklimit) { if (autokick($aseco, $player) && $aseco->server->jfreu->autorank && !$player->isspectator) { autorank($aseco, $player); } } else { ajouter_joueur_liste($aseco, $player->login, false, false); // if starting up, bail out immediately if ($aseco->startup_phase) return; // define admin/player title $title = $aseco->isMasterAdmin($player) ? $adm.$aseco->titles['MASTERADMIN'][0] : ($aseco->isAdmin($player) ? $adm.$aseco->titles['ADMIN'][0] : ($aseco->isOperator($player) ? $adm.$aseco->titles['OPERATOR'][0] : $blu.'New Player')); // format ladder rank with narrow spaces between the thousands $rank = str_replace(' ', '$n $m', number_format($player->ladderrank, 0, ' ', ' ')); if ($feature_ranks) { $message = formatText($aseco->server->jfreu->player_joins, $title, clean_nick($player->nickname), $nation, $rank, $rasp->getRank($player->login)); } else { $message = formatText($aseco->server->jfreu->player_join, $title, clean_nick($player->nickname), $nation, $rank); } $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); } } // player_connect // called @ onPlayerDisconnect function player_disconnect($aseco, $player) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; if ($aseco->server->jfreu->current_vote) { if ($aseco->server->jfreu->vote_item->login == $player->login) { vote_end($aseco); $message = $yel.'>> '.$whi.clean_nick($player->nickname).$blu.'\'s vote cancelled.'; $aseco->client->query('ChatSendServerMessage', $message); } } if (!$aseco->server->jfreu->playerlist[$player->login]->kicked) { $message = formatText($aseco->server->jfreu->player_left, clean_nick($player->nickname), formatTimeH($player->getTimeOnline() * 1000, false)); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); if ($aseco->server->jfreu->autorank && !$aseco->server->jfreu->playerlist[$player->login]->speconly) { autorank($aseco, $player); } } } // player_disconnect function autokick($aseco, $player) // returns true if no kick, false if kick { global $rasp, $feature_ranks; $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; // abbreviate long nations $nation = $player->nation; if (strlen($nation) > 14) $nation = mapCountry($nation); if ($aseco->server->jfreu->autorank) { $limit = $aseco->server->jfreu->autolimit; } else { $limit = $aseco->server->jfreu->limit; } // check if hardlimit active and player rank higher than hardlimit if ($aseco->server->jfreu->hardlimit != 0 && ($player->ladderrank > $aseco->server->jfreu->hardlimit || $player->ladderrank <= 0)) { ajouter_joueur_liste($aseco, $player->login, false, false); // kick the player $message = $red.'This server is only for players with a rank lower than '.$whi.$aseco->server->jfreu->hardlimit.$red.' !'; $aseco->client->query('ChatSendServerMessageToLogin', $yel.'> '.$message, $player->login); // log console message $aseco->console('[HardLimit] player "{1}" kicked (rank: {2})', $player->login, $player->ladderrank); $aseco->server->jfreu->playerlist[$player->login]->kicked = true; if ($aseco->server->getGame() == 'TMF') $aseco->client->addCall('Kick', array($player->login, $message.' $z')); else $aseco->client->addCall('Kick', array($player->login)); return false; } // check for high rank or no rank if ($player->ladderrank > $limit || $player->ladderrank <= 0) { // if not spectator, check for no VIP player or VIP_Team member if (!$player->isspectator && !in_array($player->login, $aseco->server->jfreu->vip_list) && !in_array($player->teamname, $aseco->server->jfreu->vip_team_list)) { ajouter_joueur_liste($aseco, $player->login, false, false); // kick the player $message = $red.'This server is only for players with a rank lower than '.$whi.$limit.$red.' !'; $aseco->client->query('ChatSendServerMessageToLogin', $yel.'> '.$message, $player->login); if ($nick = clean_nick($player->nickname)) { // define admin/player title $title = $aseco->isMasterAdmin($player) ? $adm.$aseco->titles['MASTERADMIN'][0] : ($aseco->isAdmin($player) ? $adm.$aseco->titles['ADMIN'][0] : ($aseco->isOperator($player) ? $adm.$aseco->titles['OPERATOR'][0] : $blu.'New Player')); // format ladder rank with narrow spaces between the thousands $rank = str_replace(' ', '$n $m', number_format($player->ladderrank, 0, ' ', ' ')); $message2 = $yel.'>> '.$title.': '.$whi.$nick.$blu.' Nation: '.$whi.$nation.$blu.' Ladder: '.$red.$rank.$blu.' ['.$red.'Kicked'.$blu.' ]'; $aseco->client->query('ChatSendServerMessage', $message2); } // log console message $aseco->console('[AutoRank] player "{1}" kicked (rank: {2})', $player->login, $player->ladderrank); $aseco->server->jfreu->playerlist[$player->login]->kicked = true; if ($aseco->server->getGame() == 'TMF') $aseco->client->addCall('Kick', array($player->login, $message.' $z')); else $aseco->client->addCall('Kick', array($player->login)); return false; } // if spectator, check for no VIP player or VIP_Team member elseif ($player->isspectator && !in_array($player->login, $aseco->server->jfreu->vip_list) && !in_array($player->teamname, $aseco->server->jfreu->vip_team_list)) { if ($nick = clean_nick($player->nickname)) { ajouter_joueur_liste($aseco, $player->login, false, true); // define admin/player title $title = $aseco->isMasterAdmin($player) ? $adm.$aseco->titles['MASTERADMIN'][0] : ($aseco->isAdmin($player) ? $adm.$aseco->titles['ADMIN'][0] : ($aseco->isOperator($player) ? $adm.$aseco->titles['OPERATOR'][0] : $blu.'New Player')); // format ladder rank with narrow spaces between the thousands $rank = str_replace(' ', '$n $m', number_format($player->ladderrank, 0, ' ', ' ')); $message = $yel.'>> '.$title.': '.$whi.$nick.$blu.' Nation: '.$whi.$nation.$blu.' Ladder: '.$red.$rank.$blu.' ['.$gre.'SpecOnly'.$blu.']'; $aseco->client->query('ChatSendServerMessage', $message); spec_message($aseco, $player->login); } } else { // VIP player/spectator ajouter_joueur_liste($aseco, $player->login, true, false); if ($nick = clean_nick($player->nickname)) { // define admin/player title $title = $aseco->isMasterAdmin($player) ? $adm.$aseco->titles['MASTERADMIN'][0] : ($aseco->isAdmin($player) ? $adm.$aseco->titles['ADMIN'][0] : ($aseco->isOperator($player) ? $adm.$aseco->titles['OPERATOR'][0] : $blu.'New Player')); // format ladder rank with narrow spaces between the thousands $rank = str_replace(' ', '$n $m', number_format($player->ladderrank, 0, ' ', ' ')); $message = $yel.'>> '.$title.': '.$whi.$nick.$blu.' Nation: '.$whi.$nation.$blu.' Ladder: '.$red.$rank.' '; if ($feature_ranks) { $message .= $blu.' Server: '.$whi.$rasp->getRank($player->login); } $message .= $blu.' ['.$gre.'VIP'.$blu.']'; $aseco->client->query('ChatSendServerMessage', $message); } } } else { // normal player ajouter_joueur_liste($aseco, $player->login, false, false); if ($nick = clean_nick($player->nickname)) { // define admin/player title $title = $aseco->isMasterAdmin($player) ? $adm.$aseco->titles['MASTERADMIN'][0] : ($aseco->isAdmin($player) ? $adm.$aseco->titles['ADMIN'][0] : ($aseco->isOperator($player) ? $adm.$aseco->titles['OPERATOR'][0] : $blu.'New Player')); // format ladder rank with narrow spaces between the thousands $rank = str_replace(' ', '$n $m', number_format($player->ladderrank, 0, ' ', ' ')); $message = $yel.'>> '.$title.': '.$whi.$nick.$blu.' Nation: '.$whi.$nation.$blu.' Ladder: '.$whi.$rank; if ($feature_ranks) { $message .= $blu.' Server: '.$whi.$rasp->getRank($player->login); } $message .= $blu.' ['.$gre.'OK'.$blu.']'; $aseco->client->query('ChatSendServerMessage', $message); } } return true; } // autokick function autorank($aseco, $command) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $nbjoueurs = count($aseco->server->players->player_list); $nbjoueurs2 = 0; $total = 0; $limit = $aseco->server->jfreu->autolimit; if ($nbjoueurs > 0 && $aseco->server->jfreu->autorankminplayers <= $nbjoueurs) { foreach ($aseco->server->players->player_list as $pl) { if (isset($pl->ladderrank) && $pl->ladderrank > 0 && !$aseco->server->jfreu->playerlist[$pl->login]->speconly) { if (!$aseco->server->jfreu->autorankvip && isvip($aseco, $pl->login) && $pl->ladderrank > $limit) { // VIP (incl. unSpec) over auto-ranklimit & autorankvip OFF: // ignore in autorank calculation } else { $total += $pl->ladderrank; $nbjoueurs2++; } } } if ($total > 0) { $average = $total / $nbjoueurs2; $newlimit = round($average + $aseco->server->jfreu->offset); if ($newlimit <= 0) // prevent negative limit { $newlimit = 1; } set_ranklimit($aseco, $newlimit, 1); } } else { $message = $yel.'>> '.$blu.'Not enough players: '.$whi.$nbjoueurs.$blu.'/'.$whi.$aseco->server->jfreu->autorankminplayers.$blu.' (autorank '.$red.'disabled'.$blu.')'; $aseco->client->query('ChatSendServerMessage', $message); set_ranklimit($aseco, $aseco->server->jfreu->limit, 1); } } // autorank function spec_message($aseco, $login) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $message = $yel.'> '.$blu.'You are '.$whi.'SpecOnly'.$blu.', ask an admin to be unSpec.' . LF .$yel.'> '.$blu.'Or use the '.$whi.'/unspec'.$blu.' command to launch a vote.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } // spec_message // called @ onCheckpoint function kick_speconly($aseco, $checkpt) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $login = $checkpt[1]; if (isset($aseco->server->jfreu->playerlist[$login]) && $aseco->server->jfreu->playerlist[$login]->speconly) { if ($player = $aseco->server->players->getPlayer($login)) { $message = $yel.'>> '.$blu.'SpecOnly '.$whi.clean_nick($player->nickname).$blu.' tried to join the race ['.$red.'Kicked'.$blu.' ]'; $aseco->client->query('ChatSendServerMessage', $message); // log console message $aseco->console('[SpecOnly] player "{1}" kicked (rank: {2})', $player->login, $player->ladderrank); kicker_login($aseco, $player->login); } } } // kick_speconly // called @ onEndRace function kick_hirank($aseco) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; if ($aseco->server->jfreu->kickhirank) { $nbjoueurs = count($aseco->server->players->player_list); $max = $aseco->server->jfreu->maxplayers; $diff = $nbjoueurs - $max; if ($diff > 0) { $message = $yel.'>> '.$blu.'Server is full ('.$red.$nbjoueurs.$blu.'/'.$whi.$max.$blu.'): $n'.$whi.$diff.$blu.' Hi-rank player'.($diff == 1 ? '' : 's').' will be kicked.'; $aseco->client->query('ChatSendServerMessage', $message); kick_worst($aseco, $diff); } else { $message = $yel.'>> '.$blu.'Server is not full ('.$gre.$nbjoueurs.$blu.'/'.$whi.$max.$blu.'): '.$gre.'No kick'.$blu.'.'; $aseco->client->query('ChatSendServerMessage', $message); } } } // kick_hirank function kick_worst($aseco, $x) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; if (count($aseco->server->players->player_list) == 0) { return 0; } foreach ($aseco->server->players->player_list as $pl) { $listakicker[$pl->login] = ($pl->ladderrank > 0 ? $pl->ladderrank : PHP_INT_MAX); } arsort($listakicker); $nbjoueurs = count($listakicker); if ($x > $nbjoueurs) { $x = $nbjoueurs; } if ($x == 0) { $message = $yel.'>> '.$red.'No kick !'; $aseco->client->query('ChatSendServerMessage', $message); return 0; } $i = 0; $nicknames = ''; foreach ($listakicker as $login => $rank) { $playertemp = $aseco->server->players->getPlayer($login); $nicknames .= $whi.clean_nick($playertemp->nickname); // log console message $aseco->console('[KickWorst] player "{1}" kicked (rank: {2})', $login, $rank); kicker_login($aseco, $login); if (++$i == $x) break; // stop if we've got enough $nicknames .= $blu.', '; } $message = $yel.'>> '.$blu.'Players: '.$nicknames.$red.' kicked'.$blu.'.'; $aseco->client->query('ChatSendServerMessage', $message); if ($aseco->server->jfreu->autorank) { autorank($aseco, $x); } return $x; } // kick_worst function chat_ranklimit($aseco, $command) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $login = $command['author']->login; if ($aseco->server->jfreu->ranklimit) { if ($aseco->server->jfreu->autorank) { $message = $yel.'> '.$blu.'Auto-RankLimit: '.$whi.$aseco->server->jfreu->autolimit; } else { $message = $yel.'> '.$blu.'RankLimit: '.$whi.$aseco->server->jfreu->limit; } } else { $message = $yel.'> '.$blu.'RankLimit: '.$whi.'OFF'.$blu.'.'; } $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } // chat_ranklimit function set_ranklimit($aseco, $limit, $auto) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; if (isset($limit) && $limit != 0) { $message = ''; if ($auto == 1) // autorank ON --> limit changed by autorank function { $aseco->server->jfreu->autolimit = $limit; $message = $yel.'>> '.$blu.'Auto-RankLimit: '.$whi.$limit; } elseif ($auto == 0) // autorank OFF --> limit changed by admin { $aseco->server->jfreu->limit = $limit; $message = $yel.'>> '.$blu.'New RankLimit: '.$whi.$limit; } elseif ($auto == 2) // autorank ON --> limit forced by admin { $aseco->server->jfreu->autolimit = $limit; $message = $yel.'>> '.$blu.'Auto-RankLimit: '.$whi.$limit.$blu.' (forced by admin)'; } if (!$aseco->server->jfreu->ranklimit) { $message = $yel.'>> '.$blu.'RankLimit: '.$whi.'OFF'.$blu.'.'; } $aseco->client->query('ChatSendServerMessage', $message); if ($aseco->server->jfreu->autochangename) { $servername = $aseco->server->jfreu->servername . $aseco->server->jfreu->top . $limit; $aseco->client->query('SetServerName', $servername); } } } // set_ranklimit function getpassword($aseco, $spec) // spec = true: specPassword || false: playerPassword { $aseco->client->query('GetServerOptions'); $options = $aseco->client->getResponse(); if ($spec) { return $options['PasswordForSpectator']; } else { return $options['Password']; } } // getpassword function chat_password($aseco, $command) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $login = $command['author']->login; // check for spectator or SpecOnly status if ($aseco->isSpectator($command['author']) || $aseco->server->jfreu->playerlist[$login]->speconly) { $pass = getpassword($aseco, true); $message = $yel.'> '.$blu.'Spectator password is: '.$whi.$pass.$blu.'.'; } else { $pass = getpassword($aseco, false); $message = $yel.'> '.$blu.'Player password is: '.$whi.$pass.$blu.'.'; } $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } // chat_password /* disabled, this is too childish - Xymph function chat_fake($aseco, $command) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $rank = 1; $time1 = rand(20, 30); $time2 = rand(10, 99); $message = $yel.'>> '.$whi.clean_nick($command['author']->nickname).$gre.' took the '.$whi.$rank.'.'.$gre.' Local Record with a time of '.$whi.'00:'.$time1.'.'.$time2.$gre.'! $000(fake)'; $aseco->client->query('ChatSendServerMessage', $message); } // chat_fake disabled */ // called @ onEndRace function info_message($aseco, $data) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; if ($aseco->server->jfreu->infomessages == 0) { /* disabled, no need to spam that messages are off - Xymph $message = $yel.'>> '.$blu.'Messages: '.$whi.'OFF'.$blu.'.'; $aseco->client->query('ChatSendServerMessage', $message); disabled */ return; } // get random message $i = rand(1, $aseco->server->jfreu->nbmessages); $message = $aseco->formatColors($aseco->server->jfreu->message_start . $aseco->server->jfreu->messages[$i]); // hyperlink release page on TMF if ($aseco->server->getGame() == 'TMF') { $message = preg_replace('|' . XASECO_TMN . '|', '$l[$0]$0$l', $message); $message = preg_replace('|' . XASECO_ORG . '|', '$l[$0]$0$l', $message); } // send the message & test for scoreboard or /message command if ($aseco->server->getGame() == 'TMF' && $aseco->server->jfreu->infomessages == 2 && function_exists('send_window_message')) send_window_message($aseco, $message, ($data !== false)); else $aseco->client->query('ChatSendServerMessage', $message); } // info_message function chat_message($aseco, $command) { info_message($aseco, false); } // chat_message // called @ onChat function novote($aseco, $chat) { global $feature_votes; // from rasp.settings.php // disabled if chat-based votes are enabled if (!$feature_votes && $aseco->server->jfreu->novote) { $aseco->client->query('CancelVote'); } } // novote /* disabled as it's not related to /vote events - Xymph // called @ onPlayerVote function novote_message($aseco) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; if ($aseco->server->jfreu->novote) { $message = $yel.'>> '.$blu.'Vote canceled.'; $aseco->client->query('ChatSendServerMessage', $message); } } // novote_message disabled */ // called @ onChat function BadWords($aseco, $chat) { // if server message or no badwords checking, bail out immediately if ($chat[0] == $aseco->server->id) return; if (!$aseco->server->jfreu->badwords) return; $texte = clean_nick($chat[2]); $temp = ''; $temp2 = ' '; $i = 0; while (isset($texte[$i]) && $i < 1000) { if ($texte[$i] != ' ' && $texte[$i] != $temp2) { $temp2 = $texte[$i]; $temp .= $texte[$i]; } $i++; } $texte = $temp; $texte = str_replace('|_|', 'u', $texte); $texte = str_replace('I<', 'k', $texte); $texte = str_replace('|<', 'k', $texte); $texte = str_replace('|', 'l', $texte); $texte = str_replace('@', 'a', $texte); $texte = str_replace('á', 'a', $texte); $texte = str_replace('à', 'a', $texte); $texte = str_replace('á', 'a', $texte); $texte = str_replace('â', 'a', $texte); $texte = str_replace('ä', 'a', $texte); $texte = str_replace('å', 'a', $texte); $texte = str_replace('é', 'e', $texte); $texte = str_replace('è', 'e', $texte); $texte = str_replace('ë', 'e', $texte); $texte = str_replace('ê', 'e', $texte); $texte = str_replace('!', 'i', $texte); $texte = str_replace('¡', 'i', $texte); $texte = str_replace('¿', 'i', $texte); $texte = str_replace('í', 'i', $texte); $texte = str_replace('ì', 'i', $texte); $texte = str_replace('ï', 'i', $texte); $texte = str_replace('î', 'i', $texte); $texte = str_replace('0', 'o', $texte); $texte = str_replace('ó', 'o', $texte); $texte = str_replace('ò', 'o', $texte); $texte = str_replace('ö', 'o', $texte); $texte = str_replace('ô', 'o', $texte); $texte = str_replace('ú', 'u', $texte); $texte = str_replace('ù', 'u', $texte); $texte = str_replace('ü', 'u', $texte); $texte = str_replace('û', 'u', $texte); $texte = str_replace('.', '', $texte); $texte = str_replace('*', '', $texte); $texte = str_replace('-', '', $texte); $texte = str_replace('_', '', $texte); $texte = str_replace('"', '', $texte); $texte = str_replace('\'', '', $texte); foreach ($aseco->server->jfreu->badwordslist as $mot) { if (stristr($texte, $mot)) { // get offending player $login = $chat[1]; if (!$player = $aseco->server->players->getPlayer($login)) return; if (!$nick = $player->nickname) $nick = $login; badword_found($login, $nick, $mot); return; } } } // BadWords function badword_found($login, $nick, $mot) { global $aseco; $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $max = $aseco->server->jfreu->badwordsnum; $aseco->server->jfreu->playerlist[$login]->badwords++; $message = $yel.'>> '.$red.'Language plz !'; if ($mot != '') { $message2 = $yel.'> '.$red.'[ '.$whi.'"'.$mot.'"'.$red.' is a forbidden word]'; } else { $message2 = $yel.'> '.$red.'[That is a forbidden word too]'; } $aseco->client->query('ChatSendServerMessageToLogin', $message2, $login); if ($aseco->server->jfreu->badwordsban && $aseco->server->jfreu->playerlist[$login]->badwords > $max) { $max2 = $max * 2; $message .= $blu.' ('.$whi.clean_nick($nick).$blu.' : '; $message .= $whi.$aseco->server->jfreu->playerlist[$login]->badwords.$blu.'/'.$whi.$max2.$blu; $message .= $red.' to ban'.$blu.') '; } else { $message .= $blu.' ('.$whi.clean_nick($nick).$blu.' : '; $message .= $whi.$aseco->server->jfreu->playerlist[$login]->badwords.$blu.'/'.$whi.$max.$blu; $message .= $red.' to kick'.$blu.') '; } if (($aseco->server->jfreu->playerlist[$login]->badwords % $max) == 0) { if ($aseco->server->jfreu->badwordsban) { if ($aseco->server->jfreu->playerlist[$login]->badwords > $max) { $message .= ' ['.$red.'Banned for '.$whi.$aseco->server->jfreu->badwordstime.$red.' mins'.$blu.' ]'; $aseco->client->query('ChatSendServerMessage', $message); $aseco->server->jfreu->playerlist[$login]->badwords = 0; banfor($aseco, $login, $aseco->server->jfreu->badwordstime); } else { $message .= ' ['.$red.'Kicked'.$blu.' ] '; $aseco->client->query('ChatSendServerMessage', $message); // log console message $aseco->console('[BadWords] player "{1}" kicked', $login); $aseco->server->jfreu->playerlist[$login]->kicked = true; $aseco->client->addCall('Kick', array($login)); } } else { $message .= ' ['.$red.'Kicked'.$blu.' ] '; $aseco->client->query('ChatSendServerMessage', $message); $aseco->server->jfreu->playerlist[$login]->badwords = 0; // log console message $aseco->console('[BadWords] player "{1}" kicked', $login); $aseco->server->jfreu->playerlist[$login]->kicked = true; $aseco->client->addCall('Kick', array($login)); } } else { $aseco->client->query('ChatSendServerMessage', $message); } } // badword_found // called @ onPlayerFinish function pf_kick($aseco, $finish) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; if ($aseco->server->jfreu->pf == 0) { return 0; } if ($finish->score == 0) { return 0; } // more than 0.01 sec faster than PF time? if ($finish->score < ($aseco->server->jfreu->pf - 10)) { $message = $yel.'>> '.$blu.'Player '.$whi.clean_nick($finish->player->nickname).$blu.' did not PF. ('.$red.'Kicked'.$blu.')'; $aseco->client->query('ChatSendServerMessage', $message); // log console message $aseco->console('[NoPfKick] player "{1}" kicked (rank: {2})', $player->login, $player->ladderrank); kicker_login($aseco, $finish->player->login); } } // pf_kick /* disabled up_to_date function & /uptodate command, superseded in main system - Xymph function up_to_date($aseco) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; if ($file = @fopen('http://reload.servegame.com/plugin/reload_data/version.php', 'rb')) { $last = trim(fgets($file)); if ($last != $aseco->server->jfreu->version) { $message = $yel.'> '.$blu.'New version of Jfreu\'s plugin available: '.$gre.$last.$blu.'.'.LF.$yel.'> '.$red.'http://jfreu.servegame.com'; return $message; } else { $message = $yel.'> '.$blu.'Your Jfreu\'s plugin version is up to date.'; return $message; } } else { $message = $yel.'> '.$red.'Error: can\'t find the last version.'; return $message; } } // up_to_date function chat_uptodate($aseco, $command) { $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $login = $command['author']->login; if ($aseco->isAnyAdmin($command['author'])) { $aseco->client->query('ChatSendServerMessageToLogin', up_to_date($aseco), $login); } else { $message = $aseco->getChatMessage('NO_ADMIN'); $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // chat_uptodate disabled */ function addJfreuAdminChatCommand($name, $help) { global $aseco; $i = count($aseco->server->jfreu->admin_commands); $aseco->server->jfreu->admin_commands[$i] = new jfreu_command(); $aseco->server->jfreu->admin_commands[$i]->name = $name; $aseco->server->jfreu->admin_commands[$i]->help = $help; $aseco->server->jfreu->admin_commands[$i]->isadmin = true; // always admin } // addJfreuAdminChatCommand function clean_nick($nick) { global $aseco; $whi = $aseco->server->jfreu->white; $yel = $aseco->server->jfreu->yellow; $red = $aseco->server->jfreu->red; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $adm = $aseco->server->jfreu->admin; $propre = stripColors($nick); if ($propre == '') { return $red.'ERROR'; } return $propre; } // clean_nick ?>