diff --git a/application/core/Maps/MapCommands.php b/application/core/Maps/MapCommands.php index 16cddc93..67a1bb79 100644 --- a/application/core/Maps/MapCommands.php +++ b/application/core/Maps/MapCommands.php @@ -5,11 +5,8 @@ namespace ManiaControl\Maps; use FML\Controls\Quad; use FML\Controls\Quads\Quad_Icons64x64_1; use FML\Controls\Quads\Quad_UIConstruction_Buttons; -use FML\ManiaLink; -use FML\Script\EUISound; use ManiaControl\Admin\AuthenticationManager; use ManiaControl\Callbacks\CallbackListener; -use ManiaControl\Callbacks\CallbackManager; use ManiaControl\Commands\CommandListener; use ManiaControl\ManiaControl; use ManiaControl\Manialinks\IconManager; @@ -25,11 +22,11 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb /** * Constants */ - const ACTION_OPEN_MAPLIST = 'MapList.OpenMapList'; - const ACTION_OPEN_XLIST = 'MapList.OpenMXList'; - const ACTION_RESTART_MAP = 'MapList.RestartMap'; - const ACTION_SKIP_MAP = 'MapList.NextMap'; - + const ACTION_OPEN_MAPLIST = 'MapCommands.OpenMapList'; + const ACTION_OPEN_XLIST = 'MapCommands.OpenMXList'; + const ACTION_RESTART_MAP = 'MapCommands.RestartMap'; + const ACTION_SKIP_MAP = 'MapCommands.NextMap'; + /** * Private Properties */ @@ -43,17 +40,17 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb public function __construct(ManiaControl $maniaControl) { $this->maniaControl = $maniaControl; $this->initActionsMenuButtons(); - + // Register for admin chat commands $this->maniaControl->commandManager->registerCommandListener('nextmap', $this, 'command_NextMap', true); $this->maniaControl->commandManager->registerCommandListener('restartmap', $this, 'command_RestartMap', true); $this->maniaControl->commandManager->registerCommandListener('addmap', $this, 'command_AddMap', true); $this->maniaControl->commandManager->registerCommandListener('removemap', $this, 'command_RemoveMap', true); - + // Register for player chat commands $this->maniaControl->commandManager->registerCommandListener(array('maps', 'list'), $this, 'command_List'); $this->maniaControl->commandManager->registerCommandListener(array('xmaps', 'xlist'), $this, 'command_xList'); - + // Menu Buttons $this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_OPEN_XLIST, $this, 'command_xList'); $this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_OPEN_MAPLIST, $this, 'command_List'); @@ -71,19 +68,19 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb $itemQuad->setImageFocus($this->maniaControl->manialinkManager->iconManager->getIcon(IconManager::MX_ICON_MOVER)); $itemQuad->setAction(self::ACTION_OPEN_XLIST); $this->maniaControl->actionsMenu->addPlayerMenuItem($itemQuad, 5, 'Open MX List'); - + // Menu Open List $itemQuad = new Quad_Icons64x64_1(); $itemQuad->setSubStyle($itemQuad::SUBSTYLE_ToolRoot); $itemQuad->setAction(self::ACTION_OPEN_MAPLIST); $this->maniaControl->actionsMenu->addPlayerMenuItem($itemQuad, 10, 'Open MapList'); - + // Menu RestartMap $itemQuad = new Quad_UIConstruction_Buttons(); $itemQuad->setSubStyle($itemQuad::SUBSTYLE_Reload); $itemQuad->setAction(self::ACTION_RESTART_MAP); $this->maniaControl->actionsMenu->addAdminMenuItem($itemQuad, 0, 'Restart Map'); - + // Menu NextMap $itemQuad = new Quad_Icons64x64_1(); $itemQuad->setSubStyle($itemQuad::SUBSTYLE_ArrowFastNext); @@ -94,22 +91,22 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb /** * Handle removemap command * - * @param array $chat + * @param array $chat * @param \ManiaControl\Players\Player $player */ public function command_RemoveMap(array $chat, Player $player) { - if (!$this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) { + if(!$this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) { $this->maniaControl->authenticationManager->sendNotAllowed($player); return; } // Get map $map = $this->maniaControl->mapManager->getCurrentMap(); - if (!$map) { + if(!$map) { $this->maniaControl->chat->sendError("Couldn't remove map.", $player->login); return; } // Remove map - if (!$this->maniaControl->client->query('RemoveMap', $map->fileName)) { + if(!$this->maniaControl->client->query('RemoveMap', $map->fileName)) { trigger_error("Couldn't remove current map. " . $this->maniaControl->getClientErrorText()); $this->maniaControl->chat->sendError("Couldn't remove map.", $player->login); return; @@ -120,21 +117,21 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb /** * Handle addmap command * - * @param array $chatCallback + * @param array $chatCallback * @param \ManiaControl\Players\Player $player */ public function command_AddMap(array $chatCallback, Player $player) { - if (!$this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) { + if(!$this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) { $this->maniaControl->authenticationManager->sendNotAllowed($player); return; } // TODO: Use MX fetcher $params = explode(' ', $chatCallback[1][2], 2); - if (count($params) < 2) { + if(count($params) < 2) { $this->maniaControl->chat->sendUsageInfo('Usage example: //addmap 1234', $player->login); return; } - + // add Map from Mania Exchange $this->maniaControl->mapManager->addMapFromMx($params[1], $player->login); } @@ -142,11 +139,11 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb /** * Handle /nextmap Command * - * @param array $chat + * @param array $chat * @param \ManiaControl\Players\Player $player */ public function command_NextMap(array $chat, Player $player) { - if (!$this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) { + if(!$this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) { $this->maniaControl->authenticationManager->sendNotAllowed($player); return; } @@ -156,11 +153,11 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb /** * Handle restartmap command * - * @param array $chat + * @param array $chat * @param \ManiaControl\Players\Player $player */ public function command_RestartMap(array $chat, Player $player) { - if (!$this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) { + if(!$this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) { $this->maniaControl->authenticationManager->sendNotAllowed($player); return; } @@ -170,7 +167,7 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb /** * Handle /maps command * - * @param array $chatCallback + * @param array $chatCallback * @param Player $player */ public function command_List(array $chatCallback, Player $player) { @@ -180,7 +177,7 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb /** * Handle ManiaExchange list command * - * @param array $chatCallback + * @param array $chatCallback * @param Player $player */ public function command_xList(array $chatCallback, Player $player) { diff --git a/application/core/Maps/MapList.php b/application/core/Maps/MapList.php index 6e9426d6..74eb2a12 100644 --- a/application/core/Maps/MapList.php +++ b/application/core/Maps/MapList.php @@ -78,18 +78,29 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { $params = explode(' ', $chatCallback[1][2]); - $serverInfo = $this->maniaControl->server->getSystemInfo(); - $title = strtoupper(substr($serverInfo['TitleId'], 0, 2)); + $titleId = $this->maniaControl->server->titleId; + $title = strtoupper(substr($titleId, 0, 2)); - $mapName = ''; - $author = ''; - $environment = ''; + $searchString = ''; + $author = ''; + $environment = ''; // TODO also get actual environment - $recent = true; + $recent = false; - if(count($params) > 1) { + $this->maniaControl->client->query('GetModeScriptInfo'); + $scriptInfos = $this->maniaControl->client->getResponse(); + + //var_dump($scriptInfos); + if(count($params) >= 1) { foreach($params as $param) { - if($param == '/xlist') { + if($param == '/xlist' || $param == MapCommands::ACTION_OPEN_XLIST) { + /* $mapTypes = str_replace($scriptInfos["CompatibleMapTypes"][0]); + $mapTypeArray = explode($mapTypes, ","); + $searchString = $mapTypeArray[0]; + var_dump($mapTypes); + var_dump($mapTypeArray); + //$searchString = str_replace($mapTypeArray[0], '',) + var_dump($searchString);*/ continue; } if(strtolower(substr($param, 0, 5)) == 'auth:') { @@ -97,11 +108,12 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { } elseif(strtolower(substr($param, 0, 4)) == 'env:') { $environment = substr($param, 4); } else { - if($mapName == '') { - $mapName = $param; + if($searchString == '') { + $searchString = $param; } else { // concatenate words in name - $mapName .= '%20' . $param; + $searchString .= '%20' . $param; } + var_dump("test"); } } @@ -109,7 +121,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { } // search for matching maps - $maps = new MXInfoSearcher($title, $mapName, $author, $environment, $recent); + $maps = new MXInfoSearcher($title, $searchString, $author, $environment, $recent); // check if there are any results if(!$maps->valid()) { diff --git a/application/core/Server/Server.php b/application/core/Server/Server.php index a527d3b6..018cd07d 100644 --- a/application/core/Server/Server.php +++ b/application/core/Server/Server.php @@ -4,7 +4,6 @@ namespace ManiaControl\Server; use ManiaControl\Callbacks\CallbackListener; use ManiaControl\Callbacks\CallbackManager; -use ManiaControl\FileUtil; use ManiaControl\ManiaControl; use ManiaControl\Players\Player; @@ -16,12 +15,12 @@ require_once __DIR__ . '/ServerCommands.php'; * @author steeffeen & kremsy */ class Server implements CallbackListener { - + /** * Constants */ const TABLE_SERVERS = 'mc_servers'; - + /** * Public Properties */ @@ -32,7 +31,7 @@ class Server implements CallbackListener { public $login = null; public $titleId = null; public $serverCommands = null; - + /** * Private Properties */ @@ -46,9 +45,9 @@ class Server implements CallbackListener { public function __construct(ManiaControl $maniaControl) { $this->maniaControl = $maniaControl; $this->initTables(); - + $this->serverCommands = new ServerCommands($maniaControl); - + // Register for callbacks $this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MC_ONINIT, $this, 'onInit'); } @@ -58,29 +57,29 @@ class Server implements CallbackListener { */ private function updateProperties() { // System info - $systemInfo = $this->getSystemInfo(); - $this->ip = $systemInfo['PublishedIp']; - $this->port = $systemInfo['Port']; + $systemInfo = $this->getSystemInfo(); + $this->ip = $systemInfo['PublishedIp']; + $this->port = $systemInfo['Port']; $this->p2pPort = $systemInfo['P2PPort']; - $this->login = $systemInfo['ServerLogin']; + $this->login = $systemInfo['ServerLogin']; $this->titleId = $systemInfo['TitleId']; - + // Database index - $mysqli = $this->maniaControl->database->mysqli; - $query = "INSERT INTO `" . self::TABLE_SERVERS . "` ( + $mysqli = $this->maniaControl->database->mysqli; + $query = "INSERT INTO `" . self::TABLE_SERVERS . "` ( `login` ) VALUES ( ? ) ON DUPLICATE KEY UPDATE `index` = LAST_INSERT_ID(`index`);"; $statement = $mysqli->prepare($query); - if ($mysqli->error) { + if($mysqli->error) { trigger_error($mysqli->error); return; } $statement->bind_param('s', $this->login); $statement->execute(); - if ($statement->error) { + if($statement->error) { trigger_error($statement->error); $statement->close(); return; @@ -95,20 +94,20 @@ class Server implements CallbackListener { * @return bool */ private function initTables() { - $mysqli = $this->maniaControl->database->mysqli; - $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_SERVERS . "` ( + $mysqli = $this->maniaControl->database->mysqli; + $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_SERVERS . "` ( `index` int(11) NOT NULL AUTO_INCREMENT, `login` varchar(100) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`index`), UNIQUE KEY `login` (`login`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Servers' AUTO_INCREMENT=1;"; $statement = $mysqli->prepare($query); - if ($mysqli->error) { + if($mysqli->error) { trigger_error($mysqli->error, E_USER_ERROR); return false; } $statement->execute(); - if ($statement->error) { + if($statement->error) { trigger_error($statement->error, E_USER_ERROR); return false; } @@ -131,7 +130,7 @@ class Server implements CallbackListener { * @return string */ public function getDataDirectory() { - if (!$this->maniaControl->client->query('GameDataDirectory')) { + if(!$this->maniaControl->client->query('GameDataDirectory')) { trigger_error("Couldn't get data directory. " . $this->maniaControl->getClientErrorText()); return null; } @@ -145,7 +144,9 @@ class Server implements CallbackListener { */ public function getMapsDirectory() { $dataDirectory = $this->getDataDirectory(); - if (!$dataDirectory) return null; + if(!$dataDirectory) { + return null; + } return "{$dataDirectory}Maps/"; } @@ -156,7 +157,9 @@ class Server implements CallbackListener { * @return bool */ public function checkAccess($directory) { - if (!$directory) return false; + if(!$directory) { + return false; + } return (is_dir($directory) && is_writable($directory)); } @@ -167,15 +170,15 @@ class Server implements CallbackListener { * @return array */ public function getInfo($detailed = false) { - if ($detailed) { - $login = $this->getLogin(); - if (!$this->maniaControl->client->query('GetDetailedPlayerInfo', $login)) { + if($detailed) { + $login = $this->login; + if(!$this->maniaControl->client->query('GetDetailedPlayerInfo', $login)) { trigger_error("Couldn't fetch detailed server info. " . $this->maniaControl->getClientErrorText()); return null; } return $this->maniaControl->client->getResponse(); } - if (!$this->maniaControl->client->query('GetMainServerPlayerInfo')) { + if(!$this->maniaControl->client->query('GetMainServerPlayerInfo')) { trigger_error("Couldn't fetch server info. " . $this->maniaControl->getClientErrorText()); return null; } @@ -188,7 +191,7 @@ class Server implements CallbackListener { * @return array */ public function getOptions() { - if (!$this->maniaControl->client->query('GetServerOptions')) { + if(!$this->maniaControl->client->query('GetServerOptions')) { trigger_error("Couldn't fetch server options. " . $this->maniaControl->getClientErrorText()); return null; } @@ -201,7 +204,7 @@ class Server implements CallbackListener { * @return string */ public function getName() { - if (!$this->maniaControl->client->query('GetServerName')) { + if(!$this->maniaControl->client->query('GetServerName')) { trigger_error("Couldn't fetch server name. " . $this->maniaControl->getClientErrorText()); return null; } @@ -214,7 +217,7 @@ class Server implements CallbackListener { * @return string */ public function getVersion() { - if (!$this->maniaControl->client->query('GetVersion')) { + if(!$this->maniaControl->client->query('GetVersion')) { trigger_error("Couldn't fetch server version. " . $this->maniaControl->getClientErrorText()); return null; } @@ -227,7 +230,7 @@ class Server implements CallbackListener { * @return array */ public function getSystemInfo() { - if (!$this->maniaControl->client->query('GetSystemInfo')) { + if(!$this->maniaControl->client->query('GetSystemInfo')) { trigger_error("Couldn't fetch server system info. " . $this->maniaControl->getClientErrorText()); return null; } @@ -238,22 +241,21 @@ class Server implements CallbackListener { * Fetch current Game Mode * * @param bool $stringValue - * @param int $parseValue + * @param int $parseValue * @return int | string */ public function getGameMode($stringValue = false, $parseValue = null) { - if (is_int($parseValue)) { + if(is_int($parseValue)) { $gameMode = $parseValue; - } - else { - if (!$this->maniaControl->client->query('GetGameMode')) { + } else { + if(!$this->maniaControl->client->query('GetGameMode')) { trigger_error("Couldn't fetch current game mode. " . $this->maniaControl->getClientErrorText()); return null; } $gameMode = $this->maniaControl->client->getResponse(); } - if ($stringValue) { - switch ($gameMode) { + if($stringValue) { + switch($gameMode) { case 0: return 'Script'; case 1: @@ -282,7 +284,7 @@ class Server implements CallbackListener { * @return string */ public function getValidationReplay(Player $player) { - if (!$this->maniaControl->client->query('GetValidationReplay', $player->login)) { + if(!$this->maniaControl->client->query('GetValidationReplay', $player->login)) { trigger_error("Couldn't get validation replay of '{$player->login}'. " . $this->maniaControl->getClientErrorText()); return null; } @@ -297,23 +299,25 @@ class Server implements CallbackListener { */ public function getGhostReplay(Player $player) { $dataDir = $this->getDataDirectory(); - if (!$this->checkAccess($dataDir)) return null; - + if(!$this->checkAccess($dataDir)) { + return null; + } + // Build file name - $map = $this->getMap(); + $map = $this->getMap(); $gameMode = $this->getGameMode(); - $time = time(); + $time = time(); $fileName = "GhostReplays/Ghost.{$player->login}.{$gameMode}.{$time}.{$map['UId']}.Replay.Gbx"; - + // Save ghost replay - if (!$this->maniaControl->client->query('SaveBestGhostsReplay', $player->login, $fileName)) { + if(!$this->maniaControl->client->query('SaveBestGhostsReplay', $player->login, $fileName)) { trigger_error("Couldn't save ghost replay. " . $this->maniaControl->getClientErrorText()); return null; } - + // Load replay file $ghostReplay = file_get_contents("{$dataDir}Replays/{$fileName}"); - if (!$ghostReplay) { + if(!$ghostReplay) { trigger_error("Couldn't retrieve saved ghost replay."); return null; } @@ -330,22 +334,24 @@ class Server implements CallbackListener { $this->maniaControl->client->query('GetStatus'); $response = $this->maniaControl->client->getResponse(); // Check if server has the given status - if ($response['Code'] === 4) return true; + if($response['Code'] === 4) { + return true; + } // Server not yet in given status - Wait for it... - $waitBegin = time(); + $waitBegin = time(); $maxWaitTime = 20; - $lastStatus = $response['Name']; + $lastStatus = $response['Name']; $this->maniaControl->log("Waiting for server to reach status {$statusCode}..."); $this->maniaControl->log("Current Status: {$lastStatus}"); - while ($response['Code'] !== 4) { + while($response['Code'] !== 4) { sleep(1); $this->maniaControl->client->query('GetStatus'); $response = $this->maniaControl->client->getResponse(); - if ($lastStatus !== $response['Name']) { + if($lastStatus !== $response['Name']) { $this->maniaControl->log("New Status: {$response['Name']}"); $lastStatus = $response['Name']; } - if (time() - $maxWaitTime > $waitBegin) { + if(time() - $maxWaitTime > $waitBegin) { // It took too long to reach the status trigger_error("Server couldn't reach status {$statusCode} after {$maxWaitTime} seconds! " . $this->maniaControl->getClientErrorText()); return false;