TrackManiaControl/application/core/Players/Player.php

349 lines
9.3 KiB
PHP
Raw Normal View History

2013-11-09 20:18:49 +01:00
<?php
namespace ManiaControl\Players;
2014-01-01 18:53:19 +01:00
2013-12-24 13:27:59 +01:00
use ManiaControl\Formatter;
2014-05-09 17:30:43 +02:00
use ManiaControl\ManiaControl;
2013-11-09 20:18:49 +01:00
/**
2014-01-01 18:53:19 +01:00
* Player Model Class
*
2014-05-02 17:50:30 +02:00
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
2013-11-09 20:18:49 +01:00
class Player {
/*
* Public Properties
*/
public $index = -1;
public $pid = -1;
public $login = '';
public $nickname = '';
2014-02-24 20:20:17 +01:00
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;
2014-01-23 16:15:41 +01:00
public $ladderStats = null;
public $joinTime = -1;
public $ipAddress = '';
2014-01-23 16:15:41 +01:00
public $isConnected = true;
public $clientVersion = '';
public $downloadRate = -1;
public $uploadRate = -1;
public $skins = null;
2014-01-29 09:29:02 +01:00
public $daysSinceZoneInscription = -1;
2014-01-23 16:15:41 +01:00
//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;
2014-05-09 17:30:43 +02:00
/*
* Private Properties
*/
private $maniaControl = null;
2014-05-10 10:13:55 +02:00
private $cache = array();
2014-05-09 17:30:43 +02:00
/**
2014-05-09 17:30:43 +02:00
* Construct a new Player
*
* @param ManiaControl $maniaControl
2014-05-09 18:42:17 +02:00
* @param bool $connected
*/
2014-05-09 17:30:43 +02:00
public function __construct(ManiaControl $maniaControl, $connected) {
$this->maniaControl = $maniaControl;
$this->isConnected = (bool)$connected;
2014-05-03 19:53:34 +02:00
if ($connected) {
$this->joinTime = time();
}
2014-05-03 19:53:34 +02:00
}
2014-01-03 16:24:35 +01:00
2014-05-09 18:42:17 +02:00
/**
* Get the Escaped Nickname
*
* @return string
*/
public function getEscapedNickname() {
$nickname = $this->nickname;
if (!$nickname) {
$nickname = $this->login;
}
return Formatter::escapeText($nickname);
}
2014-05-03 19:53:34 +02:00
/**
* Update from ManiaPlanet PlayerInfo structure
2014-05-09 17:30:43 +02:00
*
2014-05-03 19:53:34 +02:00
* @param \Maniaplanet\DedicatedServer\Structures\PlayerInfo $mpPlayer
*/
2014-05-09 17:30:43 +02:00
public function setInfo($mpPlayer) {
$this->pid = $mpPlayer->playerId;
$this->login = $mpPlayer->login;
$this->nickname = Formatter::stripDirtyCodes($mpPlayer->nickName);
$this->rawNickname = $mpPlayer->nickName;
$this->teamId = $mpPlayer->teamId;
$this->isOfficial = $mpPlayer->isInOfficialMode;
2014-01-23 16:15:41 +01:00
//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;
2014-05-03 19:53:34 +02:00
if (!$this->nickname) {
$this->nickname = $this->login;
}
}
/**
* Update from ManiaPlanet PlayerDetailedInfo structure
2014-05-09 17:30:43 +02:00
*
2014-05-03 19:53:34 +02:00
* @param \Maniaplanet\DedicatedServer\Structures\PlayerDetailedInfo $mpPlayer
*/
2014-05-09 17:30:43 +02:00
public function setDetailedInfo($mpPlayer) {
2014-05-03 19:53:34 +02:00
$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;
2014-02-02 13:31:35 +01:00
2014-03-31 21:54:51 +02:00
if (!$this->nickname) {
$this->nickname = $this->login;
2014-01-02 16:37:52 +01:00
}
2013-12-29 12:13:45 +01:00
}
2013-12-19 21:59:10 +01:00
/**
* Check if player is not a real player
*
* @return bool
*/
2013-12-29 12:13:45 +01:00
public function isFakePlayer() {
return ($this->pid <= 0 || $this->path == "");
}
2013-12-18 15:48:33 +01:00
/**
* Get province
*
* @return string
*/
public function getProvince() {
2014-05-09 13:00:13 +02:00
return $this->getPathPart(3);
2013-12-18 15:48:33 +01:00
}
/**
2014-05-09 17:30:43 +02:00
* Get the specified Part of the Path
*
2014-05-09 17:30:43 +02:00
* @param int $partNumber
* @return string
*/
2014-05-09 17:30:43 +02:00
public function getPathPart($partNumber) {
$pathParts = explode('|', $this->path);
for ($partIndex = $partNumber; $partIndex >= 0; $partIndex--) {
if (isset($pathParts[$partIndex])) {
return $pathParts[$partIndex];
}
}
return $this->path;
}
/**
2014-05-09 17:30:43 +02:00
* Get Country
*
* @return string
*/
2014-05-09 17:30:43 +02:00
public function getCountry() {
return $this->getPathPart(2);
2014-05-09 13:00:13 +02:00
}
/**
2014-05-09 17:30:43 +02:00
* Get Continent
2014-05-09 13:00:13 +02:00
*
* @return string
*/
2014-05-09 17:30:43 +02:00
public function getContinent() {
return $this->getPathPart(1);
}
2014-01-23 16:15:41 +01:00
/**
2014-05-09 13:00:13 +02:00
* Update the Flags of the Player
2014-01-23 16:15:41 +01:00
*
* @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);
}
/**
2014-05-09 13:00:13 +02:00
* Update the Spectator Status of the player
2014-01-23 16:15:41 +01:00
*
* @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);
}
2014-05-09 19:47:20 +02:00
/**
* Get the Cache with the given Name
*
2014-05-09 23:33:24 +02:00
* @param $object
* @param string $cacheName
* @return mixed
*/
2014-05-09 23:33:24 +02:00
public function getCache($object, $cacheName) {
$className = $this->getClassName($object);
if (isset($this->cache[$className . $cacheName])) {
return $this->cache[$className . $cacheName];
}
return null;
}
/**
* Set the Cache Data for the given Name
*
2014-05-09 23:33:24 +02:00
* @param $object
* @param string $cacheName
* @param mixed $data
*/
2014-05-09 23:33:24 +02:00
public function setCache($object, $cacheName, $data) {
$className = $this->getClassName($object);
$this->cache[$className . $cacheName] = $data;
}
2014-05-10 10:12:48 +02:00
/**
* Destroys a Cache
*
* @param $object
* @param $cacheName
*/
public function destroyCache($object, $cacheName) {
$className = $this->getClassName($object);
unset($this->cache[$className . $cacheName]);
}
2014-05-09 19:47:20 +02:00
/**
* Clear the Player's Temporary Data
*/
public function clearCache() {
$this->cache = array();
}
2014-05-09 23:04:11 +02:00
/**
* Gets the Player Data
*
* @param $object
* @param $dataName
* @param $serverIndex
* @return mixed|null
*/
public function getPlayerData($object, $dataName, $serverIndex = -1) {
return $this->maniaControl->playerManager->playerDataManager->getPlayerData($object, $dataName, $this, $serverIndex);
}
/**
* Sets the Player Data
*
* @param $object
* @param $dataName
* @param $value
* @param $serverIndex
* @return bool
*/
public function setPlayerData($object, $dataName, $value, $serverIndex = -1) {
return $this->maniaControl->playerManager->playerDataManager->setPlayerData($object, $dataName, $this, $value, $serverIndex);
}
/**
* Var_Dump the Player
2014-05-10 13:33:41 +02:00
*
* @param bool $dumpCache
*/
2014-05-10 13:33:41 +02:00
public function dump($dumpCache = false) {
var_dump(json_decode(json_encode($this)));
2014-05-10 13:33:41 +02:00
if ($dumpCache) {
var_dump("PlayerCache:", $this->cache);
}
}
2014-05-09 23:33:24 +02:00
/**
* Get Class Name of a Parameter
*
* @param mixed $param
* @return string
*/
private function getClassName($param) {
//TODO move in a util or something
if (is_object($param)) {
return get_class($param);
}
if (is_string($param)) {
return $param;
}
trigger_error('Invalid class param. ' . $param);
return (string)$param;
}
2013-11-09 20:18:49 +01:00
}