PHP: function array_mt_rand(array $a){ return $a[array_keys($a)[mt_rand(0, count($a) - 1)]];}##################################/** @var \pocketmine\Server $server */$player = array_mt_rand($server->getOnlinePlayers());$server->broadcastMessage("Random player: " . $player->getName());
Slightly shorter (but maybe a little slower): PHP: /** @var \pocketmine\Server $server */$players = $server->getOnlinePlayers();$server->broadcastMessage("Random player: " . $players[array_rand($players)]->getName());
PHP: function array_mt_rand(array $a){ return array_values($a)[mt_rand(0, count($a) - 1)];} Might be faster, might not be.
Hi, sorry for bump this post, but I have a question: How I can save the random player from a specific level to a public variable? I try this: PHP: public function setPlayer($game) { $server = $this->getServer(); $players = $server->getLevelByName($game)->getPlayers(); $this->randomPlayer[$game] = $players[array_rand($players)]->getName(); foreach($server->getLevelByName($game)->getPlayers() as $p){ $p->sendMessage(TextFormat::BOLD . TextFormat::WHITE . $this->randomPlayer[$game] . " was selected as beast!");} /* It shows all players name! D':*/ } And it didn't work... And I try to get the player name with: PHP: public function getRandomPlayer($game){return $this->randomPlayer[$game];}
PHP: $players = $server->getOnlinePlayers();$server->broadcastMessage($players[mt_rand(0, count($players) - 1)]->getName());
Actually, if you want to do so, you have to be very careful on memory leak as well as checking player online before doing things upon it.
I don't know what I can do! :'/ I try A LOT of things for save a random player name... I try to save he to a class, to an array... I don't know what I can do...
PHP: $players = $level->getPlayers();$randomPlayer = $players[array_rand($players)];$this->yourVariable[$randomPlayer->getName()] = $randomPlayer->getName();
If you already save it in the key, don't waste memory saving the name on the value again. Instead, put a Boolean true for the value.