* @copyright 2014 ManiaControl Team * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 */ class Player { /* * Public Properties */ public $index = -1; public $pid = -1; public $login = ''; public $nickname = ''; public $rawNickname = ''; public $path = ''; public $authLevel = 0; public $language = ''; public $avatar = ''; public $allies = array(); public $clubLink = ''; public $teamId = -1; public $isOfficial = false; public $ladderScore = -1.; public $ladderRank = -1; public $ladderStats = null; public $joinTime = -1; public $ipAddress = ''; public $isConnected = true; public $clientVersion = ''; public $downloadRate = -1; public $uploadRate = -1; public $skins = null; public $daysSinceZoneInscription = -1; //Flags details public $forcedSpectatorState = 0; public $isReferee = false; public $isPodiumReady = false; public $isUsingStereoscopy = false; public $isManagedByAnOtherServer = false; public $isServer = false; public $hasPlayerSlot = false; public $isBroadcasting = false; public $hasJoinedGame = false; //SpectatorStatus details public $isSpectator = false; public $isTemporarySpectator = false; public $isPureSpectator = false; public $autoTarget = false; public $currentTargetId = 0; /** * Construct a player from ManiaPlanet Player structure * * @param \Maniaplanet\DedicatedServer\Structures\Player $mpPlayer */ public function __construct($mpPlayer) { if (!$mpPlayer) { $this->isConnected = false; return; } $this->pid = $mpPlayer->playerId; $this->login = $mpPlayer->login; $this->nickname = Formatter::stripDirtyCodes($mpPlayer->nickName); $this->rawNickname = $mpPlayer->nickName; $this->path = $mpPlayer->path; $this->language = $mpPlayer->language; $this->avatar = $mpPlayer->avatar['FileName']; $this->allies = $mpPlayer->allies; $this->clubLink = $mpPlayer->clubLink; $this->teamId = $mpPlayer->teamId; $this->isOfficial = $mpPlayer->isInOfficialMode; $this->ladderScore = $mpPlayer->ladderStats['PlayerRankings'][0]['Score']; $this->ladderRank = $mpPlayer->ladderStats['PlayerRankings'][0]['Ranking']; $this->ladderStats = $mpPlayer->ladderStats; $this->daysSinceZoneInscription = $mpPlayer->hoursSinceZoneInscription / 24; $this->ipAddress = $mpPlayer->iPAddress; $this->clientVersion = $mpPlayer->clientVersion; $this->downloadRate = $mpPlayer->downloadRate; $this->uploadRate = $mpPlayer->uploadRate; $this->skins = $mpPlayer->skins; //Flag Details $this->forcedSpectatorState = $mpPlayer->forceSpectator; $this->isReferee = $mpPlayer->isReferee; $this->isPodiumReady = $mpPlayer->isPodiumReady; $this->isUsingStereoscopy = $mpPlayer->isUsingStereoscopy; $this->isServer = $mpPlayer->isServer; $this->isManagedByAnOtherServer = $mpPlayer->isManagedByAnOtherServer; $this->hasPlayerSlot = $mpPlayer->hasPlayerSlot; $this->hasJoinedGame = $mpPlayer->hasJoinedGame; $this->isBroadcasting = $mpPlayer->isBroadcasting; //Spectator Status $this->isSpectator = $mpPlayer->spectator; $this->isTemporarySpectator = $mpPlayer->temporarySpectator; $this->isPureSpectator = $mpPlayer->pureSpectator; $this->autoTarget = $mpPlayer->autoTarget; $this->currentTargetId = $mpPlayer->currentTargetId; $this->joinTime = time(); if (!$this->nickname) { $this->nickname = $this->login; } } /** * Check if player is not a real player * * @return bool */ public function isFakePlayer() { return ($this->pid <= 0 || $this->path == ""); } /** * Get province * * @return string */ public function getProvince() { $pathParts = explode('|', $this->path); if (isset($pathParts[3])) { return $pathParts[3]; } return $this->getCountry(); } /** * Get country * * @return string */ public function getCountry() { $pathParts = explode('|', $this->path); if (isset($pathParts[2])) { return $pathParts[2]; } if (isset($pathParts[1])) { return $pathParts[1]; } if (isset($pathParts[0])) { return $pathParts[0]; } return $this->path; } /** * Get continent * * @return string */ public function getContinent() { $pathParts = explode('|', $this->path); if (isset($pathParts[1])) { return $pathParts[1]; } if (isset($pathParts[0])) { return $pathParts[0]; } return $this->path; } /** * Updates the Flags of the Player * * @param $flags */ public function updatePlayerFlags($flags) { //Detail flags $this->forcedSpectatorState = $flags % 10; // 0, 1 or 2 $this->isReferee = (bool)(intval($flags / 10) % 10); $this->isPodiumReady = (bool)(intval($flags / 100) % 10); $this->isUsingStereoscopy = (bool)(intval($flags / 1000) % 10); $this->isManagedByAnOtherServer = (bool)(intval($flags / 10000) % 10); $this->isServer = (bool)(intval($flags / 100000) % 10); $this->hasPlayerSlot = (bool)(intval($flags / 1000000) % 10); $this->isBroadcasting = (bool)(intval($flags / 10000000) % 10); $this->hasJoinedGame = (bool)(intval($flags / 100000000) % 10); } /** * Updates the Spectator Status of the player * * @param $spectatorStatus */ public function updateSpectatorStatus($spectatorStatus) { //Details spectatorStatus $this->isSpectator = (bool)($spectatorStatus % 10); $this->isTemporarySpectator = (bool)(intval($spectatorStatus / 10) % 10); $this->isPureSpectator = (bool)(intval($spectatorStatus / 100) % 10); $this->autoTarget = (bool)(intval($spectatorStatus / 1000) % 10); $this->currentTargetId = intval($spectatorStatus / 10000); } }