/** * Отрисовка миникарты * @param Player $char * @return array */ public function techMinimap(Player $char) { $con = $this->container->get('database_connection'); $room = $char->getRoom(); $roomAnchor = $room->getAnchor(); $zone = $room->getZone(); $maptest = $this->roomRepository->getTypesForMap($roomAnchor, $zone, $con); // TODO: сделать кастомизацию ограничительных тайлов // Кастомные ограничительные тайлы if (is_array($maptest) && $zone == "starships") { foreach ($maptest as $dir => $direction) { if (!$direction) { $maptest[$dir] = "cosmos"; } } } $result = $maptest; return $result; }
/** * Телепортация к персонажу * @param Player $char * @param $arguments * @return array */ public function jumptp(Player $char, $arguments) { $result = array(); if ($arguments && $arguments[1]) { $charName = $char->getUsername(); // приведение первого аргумента введенной команды в нижний регистр $targetPlayer = mb_strtolower($arguments[1], 'UTF-8'); $playersOnlineIds = $this->container->get('datachannel')->getOnlineIds(); $playersOnline = $this->playerRepository->findPlayersOnline($playersOnlineIds); foreach ($playersOnline as $player) { /** @var Player $player */ $playerName = $player->getUsernameCanonical(); $playerNameFull = $player->getUsername(); if (strpos($playerName, $targetPlayer) !== false) { // если персонаж найден $result["system"] = "Ты прыгнул к {$playerNameFull}!"; // перемещение $destinationRoom = $player->getRoom(); $char->setRoom($destinationRoom); $this->em->persist($char); $this->em->flush(); // отправка сообщения адресату $result["3rd"] = array($player); $result["3rdecho"] = array("system" => "{$charName} прыгнул к тебе!"); return $result; } } } else { $result["system"] = "Персонаж не найден. Применение: jumptp [имя-персонажа]"; } return $result; }