/** * Техническая функция перемещения персонажа * персонаж, комната назначения * @param Player $char * @param \Rottenwood\UtopiaMudBundle\Entity\Room $room * @return bool */ public function techGotoRoom($char, $room) { if ($room !== null) { $char->setRoom($room); $this->em->persist($char); $this->em->flush(); } return true; }
/** * Телепортация к персонажу * @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; }