207 lines
6.1 KiB
PHP
207 lines
6.1 KiB
PHP
<?php
|
|
|
|
namespace ManiaControl\Players;
|
|
|
|
use ManiaControl\Formatter;
|
|
|
|
/**
|
|
* Player Model Class
|
|
*
|
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
|
* @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);
|
|
}
|
|
}
|