예제 #1
0
파일: dummy.php 프로젝트: Geolim4/Leelabot
 public function CommandHello($id, $command)
 {
     $rcon = ServerList::getServerRCon(Server::getName());
     $player = Server::getPlayer($id);
     if (isset($command[0])) {
         $target = Server::getPlayer(Server::searchPlayer($command[0]));
         if ($target === FALSE) {
             $target = 'nobody';
         }
         if (is_array($target)) {
             $target = $target[0];
         }
         $rcon->say('Hello ' . $player->name . ', it seems you like ' . $target->name . ' !');
     } else {
         $rcon->say('Hay ' . $player->name . ' !');
     }
 }
예제 #2
0
 /** Gives a player a specific level.
  * This function gives to the specified player a specific level. It can only be used by an admin with super cow powers.
  * The first command parameter is the search mask for the wanted player, and the second one is the player's new right level.
  * 
  * \param $id The client ID.
  * \param $command The command parameters.
  * 
  * \return Nothing.
  */
 public function CommandGiveRights($id, $command)
 {
     if (!isset($command[1])) {
         RCon::tell($id, 'Not enough parameters');
         return TRUE;
     }
     $player = Server::searchPlayer($command[0]);
     if (!$player) {
         RCon::tell($id, 'Unknown player');
         return TRUE;
     } elseif (is_array($player)) {
         RCon::tell($id, 'Multiple players found : $0', array(join(', ', Server::getPlayerNames($player))));
         return TRUE;
     }
     $level = intval($command[1]);
     $player = Server::getPlayer($player);
     //If the player is not authed, we create an entry for him in the rights file
     if (!$player->auth) {
         $name = preg_replace("#[^a-zA-Z0-9]#", '', $player->name);
         $this->rights[$name] = array();
         $this->rights[$name]['aliases'] = array($player->name);
         $this->rights[$name]['GUID'] = array(Server::getName() => $player->guid);
         $this->rights[$name]['IP'] = $player->ip;
         $this->rights[$name]['level'] = $level;
         if (!empty($player->authLogin)) {
             $this->rights[$name]['auth'] = $player->authLogin;
         }
         $this->saveRights($this->config['RightsFile']);
         $player->auth = $name;
         $this->_plugins->callEventSimple('rights', 'authenticate', $player->id, $name);
         if ($this->config['Verbose']) {
             RCon::tell($id, 'Created auth user $0', $name);
             RCon::tell($player->id, 'You\'re now authed as $0', $name);
         }
     } else {
         $this->rights[$player->auth] = $level;
     }
     $this->saveRights($this->config['RightsFile']);
     $player->level = $level;
     RCon::tell($id, 'User $0 level set to $1', array($player->auth, $player->level));
     return TRUE;
 }
예제 #3
0
파일: bans.php 프로젝트: Geolim4/Leelabot
 /** Bans a player.
  * This command bans the player passed in first parameter, and parses the other parameters to add modifiers to the ban :
  * \li from <server(s)> : Specifies the range of the ban : servers can be defined one by one by separating them with a space,
  * and the special keyword in PluginBans::GLOBALBAN can be used to make the ban bot-wide (if a server is named like that, you can use
  * server:<PluginBans::GLOBALBAN> to bypass that).
  * \li for <duration> : Specifies the duration of the ban. You can use numbers and modifiers to specify the duration (valid modifiers : 
  * second(s), minute(s), hour(s), day(s), week(s), month(s), year(s)).
  * \li forever : Makes the ban permanent. Can't be used with the "for" parameter.
  * 
  * If none parameter specified, the defaults from config file are taken. If a default duration or range is not specified in the config, 
  * the default applied are 1 day and the current server from which the command has been emitted.
  * 
  * Examples : 
  * \li Simple ban : !ban linkboss
  * \li Ban from only one server : !ban linkboss from myserver
  * \li Ban from multiple servers, including one server name <PluginBans::GLOBALBAN> : !ban linkboss from myserver, otherserver,
  * 		server:<PluginBans::GLOBALBAN>
  * \li Ban from all servers : !ban linkboss from <PluginBans::GLOBALBAN>
  * \li Ban for 1 month and a half : !ban linkboss for 1 month 2 weeks
  * \li Ban from one server during 1 day : !ban linkboss from myserver for 1 day
  * \li Permanent ban : !ban linkboss forever
  * 
  * \note
  * When you specify the ban duration, if you use 2 numbers one after another, their values will be additionned. For example :
  * \li !ban linkboss for 1 2 months
  * Will result of a 3 months ban. Also, if you use a non-recognized keyword between durations, only the last before a recognized keyword
  * will be used. For example :
  * \li !ban linkboss for 1 and 2 months
  * Will result of a 2 months ban. If you do not use any modifier at all, the default modifier applied is the day.
  * 
  * \param $id The player ID who used the command.
  * \param $command The command parameters.
  * 
  * \return Nothing.
  */
 public function CommandBan($id, $command)
 {
     $ban = $this->_parseBanCommand($command);
     $error = FALSE;
     if ($ban['duration'] != 'forever' && $ban['duration'] <= 0) {
         $error = 'Cannot ban for this duration.';
     }
     if (empty($ban['servers'])) {
         $error = 'Cannot ban from zero servers.';
     }
     if (empty($ban['banned'])) {
         $error = 'There is nobody to ban.';
     }
     if ($error !== FALSE) {
         RCon::tell($id, $error);
         return;
     }
     $banned = array();
     foreach ($ban['banned'] as $player) {
         $pid = Server::searchPlayer($player);
         if (is_array($pid)) {
             RCon::tell('Multiple results found for search $0 : $1', array($player, Server::getPlayerNames($pid)));
             continue;
         } elseif ($pid === FALSE) {
             RCon::tell('No player found for search $0.', array($player));
             continue;
         }
         //Adding the entry to the banlist
         $player = Server::getPlayer($pid);
         $banID = Leelabot::UUID();
         if ($ban['duration'] !== 'forever' && $ban['duration'] < $this->_durations['day'] && count($ban['servers']) == 1) {
             //GUID save
             $this->_banlist[$banID] = array('GUIDList' => array($player->guid), 'IP' => FALSE, 'Aliases' => array($player->name), 'Duration' => $ban['duration'], 'Begin' => time(), 'Realm' => join(',', $ban['servers']), 'Identifier' => $player->name, 'Description' => '');
         } elseif ($ban['duration'] !== 'forever' && $ban['duration'] < $this->_durations['month']) {
             $this->_banlist[$banID] = array('GUIDList' => array($player->guid), 'IP' => $player->ip, 'Aliases' => array($player->name), 'Duration' => $ban['duration'], 'Begin' => time(), 'Realm' => join(',', $ban['servers']), 'Identifier' => $player->name, 'Description' => '');
             if (!isset($this->_bannedIP[$player->ip])) {
                 $this->_bannedIP[$player->ip] = array();
             }
             $this->_bannedIP[$player->ip][] = $banID;
         } else {
             $ip = explode('.', $player->ip);
             array_pop($ip);
             $ip = join('.', $ip) . '.0';
             $this->_banlist[$banID] = array('GUIDList' => array($player->guid), 'IP' => $ip, 'Aliases' => array($player->name), 'Duration' => $ban['duration'], 'Begin' => time(), 'Realm' => join(',', $ban['servers']), 'Identifier' => $player->name, 'Description' => '');
             if (!isset($this->_bannedIP[$player->ip])) {
                 $this->_bannedIP[$player->ip] = array();
             }
             $this->_bannedIP[$ip] = $banID;
         }
         //Adding the alias for better GUID search
         if (!isset($this->_bannedGUID[$player->guid])) {
             $this->_bannedGUID[$player->guid] = array();
         }
         $this->_bannedGUID[$player->guid][] = $banID;
         //We save the banlist and we kick the player
         $this->saveBanlist();
         //We call the event
         $this->_plugins->callEventSimple('bans', 'new', $player->id, $banID);
         if (in_array(Server::getName(), $ban['servers']) || $ban['servers'][0] == self::GLOBALBAN) {
             //NEED TEST, CALL APERTURE SCIENCE
             RCon::kick($player->id);
         }
     }
 }
예제 #4
0
파일: stats.php 프로젝트: Geolim4/Leelabot
 public function IrcStats($pseudo, $channel, $cmd, $message)
 {
     $server = LeelaBotIrc::nameOfServer($cmd[2], FALSE);
     $actual = Server::getName();
     if (isset($cmd[1])) {
         if ($server !== false) {
             Server::setServer($this->_main->servers[$server]);
             $target = Server::searchPlayer(trim($cmd[1]));
             if (!$target) {
                 LeelaBotIrc::sendMessage("Unknown player");
             } elseif (is_array($target)) {
                 $players = array();
                 foreach ($target as $p) {
                     $players[] = Server::getPlayer($p)->name;
                 }
                 LeelaBotIrc::sendMessage("Multiple players found : " . join(', ', $players));
             } else {
                 $buffer = array();
                 $_stats = Server::get('stats');
                 $_awards = Server::get('awards');
                 $player = Server::getPlayer($target);
                 if ($_stats[$player->id]['deaths'] != 0) {
                     $ratio = $_stats[$player->id]['kills'] / $_stats[$player->id]['deaths'];
                 } else {
                     $ratio = $_stats[$player->id]['kills'];
                 }
                 if (in_array('hits', $this->config['ShowStats'])) {
                     //Gestion des hits en fonction de la configuration du plugin de stats
                     $hits = "Hits : " . $_stats[$player->id]['hits'] . " - ";
                 }
                 if (Server::getServer()->serverInfo['g_gametype'] == 7) {
                     //Gestion des caps uniquement en CTF
                     $caps = " - Caps : " . $_stats[$player->id]['caps'];
                 }
                 LeelaBotIrc::sendMessage("Stats de " . $player->name . " : " . $hits . "Kills : " . $_stats[$player->id]['kills'] . " - Deaths : " . $_stats[$player->id]['deaths'] . " - Ratio : " . $ratio . $caps . " - Streaks : " . $_stats[$player->id]['streaks']);
             }
             Server::setServer($this->_main->servers[$actual]);
         }
     } else {
         LeelaBotIrc::sendMessage("Player name missing");
     }
 }
예제 #5
0
 public function IrcMute($pseudo, $channel, $cmd, $message)
 {
     $server = LeelaBotIrc::nameOfServer($cmd[1]);
     if ($server !== false) {
         $rcon = ServerList::getServerRCon($server);
         $serverlist = ServerList::getList();
         if (in_array($cmd[1], $serverlist)) {
             $mute = $cmd[2];
         } else {
             $mute = $cmd[1];
         }
         if (isset($mute)) {
             $target = Server::searchPlayer(trim($mute));
             if (!$target) {
                 LeelaBotIrc::sendMessage("Unknown player");
             } elseif (is_array($target)) {
                 $players = array();
                 foreach ($target as $p) {
                     $players[] = Server::getPlayer($p)->name;
                 }
                 LeelaBotIrc::sendMessage("Multiple players found : " . join(', ', $players));
             } else {
                 $rcon->mute($target);
                 LeelaBotIrc::sendMessage(Server::getPlayer($target)->name . " was muted.");
             }
         } else {
             LeelaBotIrc::sendMessage("Player name missing");
         }
     }
 }
예제 #6
0
파일: warns.php 프로젝트: Geolim4/Leelabot
 public function CommandClearWarns($id, $cmd)
 {
     if (!empty($cmd[0])) {
         $target = Server::searchPlayer($cmd[0]);
         if (!$target) {
             RCon::tell($id, "No player found.");
         } elseif (is_array($target)) {
             $players = array();
             foreach ($target as $p) {
                 $players[] = Server::getPlayer($p)->name;
             }
             RCon::tell($id, 'Multiple players found : $0', array(join(', ', $players)));
         } else {
             $this->_clearWarn($target);
             Rcon::tell($id, 'The warnings of $player are cleared.', array('player' => Server::getPlayer($target)->name));
             Rcon::tell($target, "Your warnings are cleared.");
         }
     } else {
         Rcon::tell($id, 'Missing parameters.');
     }
 }