improve dedimania plugin

This commit is contained in:
kremsy 2014-02-23 13:15:28 +01:00 committed by Steffen Schröder
parent 6a42a3d6f3
commit bcd8a9de67
5 changed files with 238 additions and 104 deletions

View File

@ -39,14 +39,14 @@ class Database {
$port = (int) $port[0]; $port = (int) $port[0];
$user = (string) $user[0]; $user = (string) $user[0];
$pass = (string) $pass[0]; $pass = (string) $pass[0];
// Open database connection // Open database connection
$this->mysqli = new \mysqli($host, $user, $pass, null, $port); $this->mysqli = new \mysqli($host, $user, $pass, null, $port);
if ($this->mysqli->connect_error) { if ($this->mysqli->connect_error) {
trigger_error($this->mysqli->connect_error, E_USER_ERROR); trigger_error($this->mysqli->connect_error, E_USER_ERROR);
} }
$this->mysqli->set_charset("utf8"); $this->mysqli->set_charset("utf8");
$this->initDatabase(); $this->initDatabase();
$this->optimizeTables(); $this->optimizeTables();
} }

View File

@ -1,7 +1,6 @@
<?php <?php
namespace Dedimania; namespace Dedimania;
require_once "DedimaniaData.php";
use FML\Controls\Control; use FML\Controls\Control;
use FML\Controls\Frame; use FML\Controls\Frame;
use FML\Controls\Label; use FML\Controls\Label;
@ -16,7 +15,6 @@ use ManiaControl\Maps\MapManager;
use ManiaControl\Players\Player; use ManiaControl\Players\Player;
use ManiaControl\Players\PlayerManager; use ManiaControl\Players\PlayerManager;
use ManiaControl\Plugins\Plugin; use ManiaControl\Plugins\Plugin;
use Maniaplanet\DedicatedServer\Xmlrpc\Base64;
class Dedimania implements CallbackListener, TimerListener, Plugin { class Dedimania implements CallbackListener, TimerListener, Plugin {
/** /**
@ -75,6 +73,10 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
public function load(ManiaControl $maniaControl) { public function load(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl; $this->maniaControl = $maniaControl;
if (!extension_loaded('xmlrpc')) {
throw new \Exception("You need to activate the PHP extension xmlrpc to run this Plugin!");
}
$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_TITLE, 'Dedimania'); $this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_TITLE, 'Dedimania');
$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_POSX, -139); $this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_POSX, -139);
$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_POSY, 7); $this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_POSY, 7);
@ -86,7 +88,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
$this->maniaControl->callbackManager->registerCallbackListener(MapManager::CB_BEGINMAP, $this, 'handleBeginMap'); $this->maniaControl->callbackManager->registerCallbackListener(MapManager::CB_BEGINMAP, $this, 'handleBeginMap');
$this->maniaControl->callbackManager->registerCallbackListener(MapManager::CB_ENDMAP, $this, 'handleMapEnd'); $this->maniaControl->callbackManager->registerCallbackListener(MapManager::CB_ENDMAP, $this, 'handleMapEnd');
$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerConnect'); $this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerConnect');
$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerDisconnect'); $this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERDISCONNECT, $this, 'handlePlayerDisconnect');
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_TM_PLAYERCHECKPOINT, $this, 'handlePlayerCheckpoint'); $this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_TM_PLAYERCHECKPOINT, $this, 'handlePlayerCheckpoint');
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_TM_PLAYERFINISH, $this, 'handlePlayerFinished'); $this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_TM_PLAYERFINISH, $this, 'handlePlayerFinished');
$this->maniaControl->timerManager->registerTimerListening($this, 'updateEverySecond', 1000); $this->maniaControl->timerManager->registerTimerListening($this, 'updateEverySecond', 1000);
@ -207,9 +209,12 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
$data = $this->decode($data); $data = $this->decode($data);
if (is_array($data)) { if (is_array($data)) {
foreach($data as $methodResponse) { foreach($data as $index => $methodResponse) {
if (xmlrpc_is_fault($methodResponse)) { if (xmlrpc_is_fault($methodResponse)) {
$this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_PLAYERCONNECT); $this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_PLAYERCONNECT);
} else if ($index <= 0) {
$responseData = $methodResponse[0];
$this->dedimaniaData->addPlayer(new DedimaniaPlayer($responseData));
} }
} }
} else { } else {
@ -232,6 +237,8 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
* @param \ManiaControl\Players\Player $player * @param \ManiaControl\Players\Player $player
*/ */
public function handlePlayerDisconnect(Player $player) { public function handlePlayerDisconnect(Player $player) {
$this->dedimaniaData->removePlayer($player->login);
// Send Dedimania request // Send Dedimania request
$data = array($this->dedimaniaData->sessionId, $player->login, ''); $data = array($this->dedimaniaData->sessionId, $player->login, '');
$content = $this->encode_request(self::DEDIMANIA_PLAYERDISCONNECT, $data); $content = $this->encode_request(self::DEDIMANIA_PLAYERDISCONNECT, $data);
@ -282,27 +289,16 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
$gameMode = $this->getGameModeString(); $gameMode = $this->getGameModeString();
$times = array(); $times = array();
$replays = array(); $replays = array();
foreach($this->dedimaniaData->records['Records'] as $record) { foreach($this->dedimaniaData->records as $record) {
if (!isset($record['New']) || !$record['New']) { /** @var RecordData $record */
if ($record->newRecord == false) {
continue; continue;
} }
array_push($times, array('Login' => $record['Login'], 'Best' => $record['Best'], 'Checks' => $record['Checks'])); array_push($times, array('Login' => $record->login, 'Best' => $record->best, 'Checks' => $record->checkpoints));
if (!isset($replays['VReplay'])) { $replays['VReplay'] = $record->vReplay;
$replays['VReplay'] = $record['VReplay']; $replays['Top1GReplay'] = $record->top1GReplay;
}
if (!isset($replays['Top1GReplay']) && isset($record['Top1GReplay'])) {
$replays['Top1GReplay'] = $record['Top1GReplay'];
}
// TODO: VReplayChecks
}
if (!isset($replays['VReplay'])) {
$replays['VReplay'] = '';
}
if (!isset($replays['VReplayChecks'])) {
$replays['VReplayChecks'] = ''; $replays['VReplayChecks'] = '';
} // TODO: VReplayChecks
if (!isset($replays['Top1GReplay'])) {
$replays['Top1GReplay'] = '';
} }
xmlrpc_set_type($replays['VReplay'], 'base64'); xmlrpc_set_type($replays['VReplay'], 'base64');
@ -422,20 +418,19 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
$oldRecord = $this->getDedimaniaRecord($login); $oldRecord = $this->getDedimaniaRecord($login);
$save = true;
if ($oldRecord) { if ($oldRecord->nullRecord || $oldRecord && $oldRecord->best > $time) {
if ($oldRecord['Best'] <= $time) {
$save = false;
}
}
if ($save) {
$player = $this->maniaControl->playerManager->getPlayer($login); $player = $this->maniaControl->playerManager->getPlayer($login);
// Save time // Save time
$newRecord = array('Login' => $login, 'NickName' => $player->nickname, 'Best' => $data[2], 'Checks' => $this->getCheckpoints($login), 'New' => true); $newRecord = new RecordData(null);
$newRecord->constructNewRecord($login, $player->nickname, $data[2], $this->getCheckpoints($login), true);
if ($this->insertDedimaniaRecord($newRecord, $oldRecord)) { if ($this->insertDedimaniaRecord($newRecord, $oldRecord)) {
// Get newly saved record // Get newly saved record
foreach($this->dedimaniaData->records['Records'] as &$record) { foreach($this->dedimaniaData->records as &$record) {
if ($record['Login'] !== $newRecord['Login']) { /** @var RecordData $record */
if ($record->login !== $newRecord->login) {
continue; continue;
} }
$newRecord = $record; $newRecord = $record;
@ -443,14 +438,14 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
} }
// Announce record // Announce record
if (!$oldRecord || $newRecord['Rank'] < $oldRecord['Rank']) { if ($oldRecord->nullRecord || $newRecord->rank < $oldRecord->rank) {
// Gained rank // Gained rank
$improvement = 'gained the'; $improvement = 'gained the';
} else { } else {
// Only improved time // Only improved time
$improvement = 'improved her/his'; $improvement = 'improved her/his';
} }
$message = '$<' . $player->nickname . '$> ' . $improvement . ' $<$o' . $newRecord['Rank'] . '.$> Dedimania Record: ' . Formatter::formatTime($newRecord['Best']); $message = '$<' . $player->nickname . '$> ' . $improvement . ' $<$o' . $newRecord->rank . '.$> Dedimania Record: ' . Formatter::formatTime($newRecord->best);
$this->maniaControl->chat->sendInformation($message); $this->maniaControl->chat->sendInformation($message);
$this->updateManialink = true; $this->updateManialink = true;
@ -497,8 +492,17 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
$this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_GETRECORDS); $this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_GETRECORDS);
return false; return false;
} else if ($index <= 0) { } else if ($index <= 0) {
$responseData = $methodResponse[0]; $responseData = $methodResponse[0];
$this->dedimaniaData->records = $responseData; $this->dedimaniaData->serverMaxRank = $responseData['ServerMaxRank'];
foreach($responseData['Players'] as $player) {
$dediPlayer = new DedimaniaPlayer(null);
$dediPlayer->constructNewPlayer($player['Login'], $player['MaxRank']);
$this->dedimaniaData->addPlayer($dediPlayer);
}
foreach($responseData['Records'] as $key => $record) {
$this->dedimaniaData->records[$key] = new RecordData($record);
}
} }
} }
} }
@ -550,36 +554,35 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
* @param array $newRecord * @param array $newRecord
* @return bool * @return bool
*/ */
private function insertDedimaniaRecord(&$newRecord, $oldRecord) { private function insertDedimaniaRecord(RecordData &$newRecord, RecordData $oldRecord) {
if (!$newRecord || !$this->dedimaniaData->records || !isset($this->dedimaniaData->records['Records'])) { //if (!$newRecord || !$this->dedimaniaData->records || !isset($this->dedimaniaData->records['Records'])) {
if ($newRecord->nullRecord || !$this->dedimaniaData->getRecordCount() == 0) {
return false; return false;
} }
$insert = false; $insert = false;
// Get max possible rank // Get max possible rank
$maxRank = $this->getMaxRank($newRecord['Login']); $maxRank = $this->dedimaniaData->getPlayerMaxRank($newRecord->login);
if (!$maxRank) {
$maxRank = 30;
}
// Loop through existing records // Loop through existing records
foreach($this->dedimaniaData->records['Records'] as $key => &$record) { foreach($this->dedimaniaData->records as $key => &$record) {
if ($record['Login'] === $newRecord['Login']) { /** @var RecordData $record */
if ($record->login === $newRecord->login) {
// Old record of the same player // Old record of the same player
if ($record['Best'] <= $newRecord['Best']) { if ($record->best <= $newRecord->best) {
// It's better - Do nothing // It's better - Do nothing
return false; return false;
} }
// Replace old record // Replace old record
unset($this->dedimaniaData->records['Records'][$key]); unset($this->dedimaniaData->records[$key]);
$insert = true; $insert = true;
break; break;
} }
// Other player's record // Other player's record
if ($record['Best'] <= $newRecord['Best']) { if ($record->best <= $newRecord->best) {
// It's better - Skip // It's better - Skip
continue; continue;
} }
@ -588,32 +591,33 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
$insert = true; $insert = true;
if ($oldRecord) { if ($oldRecord) {
// Remove old record // Remove old record
foreach($this->dedimaniaData->records['Records'] as $key2 => $record2) { foreach($this->dedimaniaData->records as $key2 => $record2) {
if ($record2['Login'] !== $oldRecord['Login']) { /** @var RecordData $record2 */
if ($record2->login !== $oldRecord->login) {
continue; continue;
} }
unset($this->dedimaniaData->records['Records'][$key2]); unset($this->dedimaniaData->records[$key2]);
break; break;
} }
} }
break; break;
} }
if (!$insert && count($this->dedimaniaData->records['Records']) < $maxRank) { if (!$insert && count($this->dedimaniaData->records) < $maxRank) {
// Records list not full - Append new record // Records list not full - Append new record
$insert = true; $insert = true;
} }
if ($insert) { if ($insert) {
// Insert new record // Insert new record
array_push($this->dedimaniaData->records['Records'], $newRecord); array_push($this->dedimaniaData->records, $newRecord);
// Update ranks // Update ranks
$this->updateDedimaniaRecordRanks(); $this->updateDedimaniaRecordRanks();
// Save replays // Save replays
foreach($this->dedimaniaData->records['Records'] as &$record) { foreach($this->dedimaniaData->records as &$record) {
if ($record['Login'] !== $newRecord['Login']) { if ($record->login !== $newRecord->login) {
continue; continue;
} }
$this->setRecordReplays($record); $this->setRecordReplays($record);
@ -630,17 +634,18 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
* Update the sorting and the ranks of all dedimania records * Update the sorting and the ranks of all dedimania records
*/ */
private function updateDedimaniaRecordRanks() { private function updateDedimaniaRecordRanks() {
if (!$this->dedimaniaData->records || !isset($this->dedimaniaData->records['Records'])) { if ($this->dedimaniaData->getRecordCount() == 0) {
return; return;
} }
//TODO move into class dedimania data
// Sort records // Sort records
usort($this->dedimaniaData->records['Records'], array($this, 'compareRecords')); usort($this->dedimaniaData->records, array($this, 'compareRecords'));
// Update ranks // Update ranks
$rank = 1; $rank = 1;
foreach($this->dedimaniaData->records['Records'] as &$record) { foreach($this->dedimaniaData->records as &$record) {
$record['Rank'] = $rank; /** @var RecordData $record */
$record->rank = $rank;
$rank++; $rank++;
} }
} }
@ -648,17 +653,18 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
/** /**
* Compare function for sorting dedimania records * Compare function for sorting dedimania records
* *
* @param array $first * @param \Dedimania\RecordData $first
* @param array $second * @param \Dedimania\RecordData $second
* @return int * @return int
*/ */
private function compareRecords($first, $second) { private function compareRecords(RecordData $first, RecordData $second) {
if ($first['Best'] < $second['Best']) { //TODO move into class dedimania data
if ($first->best < $second->best) {
return -1; return -1;
} else if ($first['Best'] > $second['Best']) { } else if ($first->best > $second->best) {
return 1; return 1;
} else { } else {
if ($first['Rank'] < $second['Rank']) { if ($first->rank < $second->rank) {
return -1; return -1;
} else { } else {
return 1; return 1;
@ -671,15 +677,15 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
* *
* @param array $record * @param array $record
*/ */
private function setRecordReplays(&$record) { private function setRecordReplays(RecordData &$record) {
// Set validation replay // Set validation replay
$validationReplay = $this->maniaControl->server->getValidationReplay($record['Login']); $validationReplay = $this->maniaControl->server->getValidationReplay($record['Login']);
if ($validationReplay) { if ($validationReplay) {
$record['VReplay'] = $validationReplay; $record->vReplay = $validationReplay;
} }
// Set ghost replay // Set ghost replay
if ($record['Rank'] <= 1) { if ($record->rank <= 1) {
$dataDirectory = $this->maniaControl->server->getDataDirectory(); $dataDirectory = $this->maniaControl->server->getDataDirectory();
if (!isset($this->dedimaniaData->directoryAccessChecked)) { if (!isset($this->dedimaniaData->directoryAccessChecked)) {
$access = $this->maniaControl->server->checkAccess($dataDirectory); $access = $this->maniaControl->server->checkAccess($dataDirectory);
@ -689,35 +695,14 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
$this->dedimaniaData->directoryAccessChecked = $access; $this->dedimaniaData->directoryAccessChecked = $access;
} }
if ($this->dedimaniaData->directoryAccessChecked) { if ($this->dedimaniaData->directoryAccessChecked) {
$ghostReplay = $this->maniaControl->server->getGhostReplay($record['Login']); $ghostReplay = $this->maniaControl->server->getGhostReplay($record->login);
if ($ghostReplay) { if ($ghostReplay) {
$record['Top1GReplay'] = $ghostReplay; $record->top1GReplay = $ghostReplay;
} }
} }
} }
} }
/**
* Get max rank for given login
*/
private function getMaxRank($login) {
if (!isset($this->dedimaniaData->records)) {
return null;
}
$records = $this->dedimaniaData->records;
$maxRank = $records['ServerMaxRank'];
foreach($records['Players'] as $player) {
if ($player['Login'] === $login) {
if ($player['MaxRank'] > $maxRank) {
$maxRank = $player['MaxRank'];
}
break;
}
}
return $maxRank;
}
/** /**
* Build server info Structure for callbacks * Build server info Structure for callbacks
*/ */
@ -793,19 +778,22 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
* Get the dedimania record of the given login * Get the dedimania record of the given login
* *
* @param string $login * @param string $login
* @return array $record * @return RecordData $record
*/ */
private function getDedimaniaRecord($login) { private function getDedimaniaRecord($login) {
if (!$this->dedimaniaData->records) { if (!$this->dedimaniaData->records) {
return null; return new RecordData(null);
} }
$records = $this->dedimaniaData->records['Records']; //TODO
foreach($records as $record) { $records = $this->dedimaniaData->records;
if ($record['Login'] === $login) { foreach($records as &$record) {
/** @var RecordData $record */
if ($record->login === $login) {
return $record; return $record;
} }
} }
return null;
return new RecordData(null);
} }
/** /**
@ -883,7 +871,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
if (!$this->dedimaniaData->records) { if (!$this->dedimaniaData->records) {
return ''; return '';
} }
$records = $this->dedimaniaData->records['Records']; $records = $this->dedimaniaData->records;
$title = $this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_TITLE); $title = $this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_TITLE);
$pos_x = $this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_POSX); $pos_x = $this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_POSX);
@ -918,6 +906,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
$titleLabel->setTranslate(true); $titleLabel->setTranslate(true);
foreach($records as $index => $record) { foreach($records as $index => $record) {
/** @var RecordData $record */
if ($index >= $lines) { if ($index >= $lines) {
break; break;
} }
@ -941,7 +930,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
$rankLabel->setSize($width * 0.06, $lineHeight); $rankLabel->setSize($width * 0.06, $lineHeight);
$rankLabel->setTextSize(1); $rankLabel->setTextSize(1);
$rankLabel->setTextPrefix('$o'); $rankLabel->setTextPrefix('$o');
$rankLabel->setText($record['Rank']); $rankLabel->setText($record->rank);
//Name //Name
$nameLabel = new Label(); $nameLabel = new Label();
@ -950,7 +939,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
$nameLabel->setX($width * -0.4); $nameLabel->setX($width * -0.4);
$nameLabel->setSize($width * 0.6, $lineHeight); $nameLabel->setSize($width * 0.6, $lineHeight);
$nameLabel->setTextSize(1); $nameLabel->setTextSize(1);
$nameLabel->setText(Formatter::stripDirtyCodes($record['NickName'])); $nameLabel->setText($record->nickName);
//Time //Time
$timeLabel = new Label(); $timeLabel = new Label();
@ -959,7 +948,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin {
$timeLabel->setX($width * 0.47); $timeLabel->setX($width * 0.47);
$timeLabel->setSize($width * 0.25, $lineHeight); $timeLabel->setSize($width * 0.25, $lineHeight);
$timeLabel->setTextSize(1); $timeLabel->setTextSize(1);
$timeLabel->setText(Formatter::formatTime($record['Best'])); $timeLabel->setText(Formatter::formatTime($record->best));
} }
return $manialink->render()->saveXML(); return $manialink->render()->saveXML();

View File

@ -28,7 +28,9 @@ class DedimaniaData {
public $code; public $code;
public $sessionId = ''; public $sessionId = '';
public $records = array(); public $records = array();
public $players = array();
public $directoryAccessChecked = false; public $directoryAccessChecked = false;
public $serverMaxRank = 30;
public function __construct($serverLogin, $dedimaniaCode, $path, $packmask, Version $serverVersion) { public function __construct($serverLogin, $dedimaniaCode, $path, $packmask, Version $serverVersion) {
$this->game = "TM2"; $this->game = "TM2";
@ -45,11 +47,54 @@ class DedimaniaData {
public function toArray() { public function toArray() {
$array = array(); $array = array();
foreach(get_object_vars($this) as $key => $value) { foreach(get_object_vars($this) as $key => $value) {
if ($key == 'records' || $key == 'sessionId' || $key == 'directoryAccessChecked') { if ($key == 'records' || $key == 'sessionId' || $key == 'directoryAccessChecked' || $key == 'serverMaxRank' || $key == 'players') {
continue; continue;
} }
$array[ucfirst($key)] = $value; $array[ucfirst($key)] = $value;
} }
return $array; return $array;
} }
public function getRecordCount() {
return count($this->records);
}
/**
* Get Max Rank for a certain Player
*
* @param $login
* @return int
*/
public function getPlayerMaxRank($login) {
$maxRank = $this->serverMaxRank;
foreach($this->players as $player) {
/** @var DedimaniaPlayer $player */
if ($player->login === $login) {
if ($player->maxRank > $maxRank) {
$maxRank = $player->maxRank;
}
break;
}
}
return $maxRank;
}
/**
* Adds a Player to the Players array
*
* @param DedimaniaPlayer $player
*/
public function addPlayer(DedimaniaPlayer $player) {
/** @var DedimaniaPlayer $player */
$this->players[$player->login] = $player;
}
/**
* Removes a Dedimania Player by its login
*
* @param string $player
*/
public function removePlayer($login) {
unset($this->players[$login]);
}
} }

View File

@ -0,0 +1,40 @@
<?php
/**
* Created by PhpStorm.
* User: Lukas
* Date: 23.02.14
* Time: 12:45
*/
namespace Dedimania;
class DedimaniaPlayer {
public $login = '';
public $maxRank = -1;
public $banned = false;
public $optionsEnabled = false;
public $options = '';
public function __construct($player) {
if ($player == null) {
return;
}
$this->login = $player['Login'];
$this->maxRank = $player['MaxRank'];
$this->banned = $player['Banned'];
$this->optionsEnabled = $player['OptionsEnabled'];
$this->options = $player['Options'];
}
/**
* Construct a new Player by its login and maxRank
* @param $login
* @param $maxRank
*/
public function constructNewPlayer($login, $maxRank){
$this->login = $login;
$this->maxRank = $maxRank;
}
}

View File

@ -0,0 +1,60 @@
<?php
/**
* Created by PhpStorm.
* User: Lukas
* Date: 23.02.14
* Time: 11:31
*/
namespace Dedimania;
use ManiaControl\Formatter;
class RecordData {
public $nullRecord = false;
public $login = '';
public $nickName = '';
public $best = -1;
public $rank = -1;
public $maxRank = -1;
public $checkpoints = '';
public $newRecord = false;
public $vReplay = '';
public $top1GReplay = '';
/**
* Construct a Record by a given Record Array
* @param $record
*/
public function __construct($record) {
if ($record == null) {
$this->nullRecord = true;
return;
}
$this->login = $record['Login'];
$this->nickName = Formatter::stripDirtyCodes($record['NickName']);
$this->best = $record['Best'];
$this->rank = $record['Rank'];
$this->maxRank = $record['MaxRank'];
$this->checkpoints = $record['Checks'];
}
/**
* Constructs a new Record via it's properties
* @param $login
* @param $nickName
* @param $best
* @param $checkpoints
* @param bool $newRecord
*/
public function constructNewRecord($login, $nickName, $best, $checkpoints, $newRecord = false) {
$this->nullRecord = false;
$this->login = $login;
$this->nickName = $nickName;
$this->best = $best;
$this->checkpoints = $checkpoints;
$this->newRecord = $newRecord;
}
}