Глобальный/Локальный чат для PMMP5
Описание: Возможность написать в локальный или глобальный чат
Ядро: PocketMine-MP (API: 5.0.0)
Автор: qwaaantex/REPLUGIN (сабку оформите плз)
Примечание: Настройка плагина полностью происходит в main.php, в будущем возможен отдельный конфиг!
Примечание: Во избежания багов, прикрепил зип+девтулс для PMMP5!
Пояснение: Для того чтобы изменить радиус локального чата, измените 100 на нужный радиус!
Пояснение: Для того чтобы изменить префикс глобального или локального чата, измените сообщение в main.php!
Установка: Поместите rechat.zip, в папку plugins, распакуйте. После этого поместите PocketMine-DevTools.phar в папку plugins
Скачать:
rechat.zip (2,6 МБ)
PocketMine-DevTools.phar (77,9 КБ)
задумка отличная, но реализация зависит от самого плагина на чаты. У тебя всё зависит от нейм тега игрока.
public function onChat(PlayerChatEvent $event)
{
$player = $event->getPlayer();
$message = $event->getMessage();
if (str_starts_with($message, "!")) {
$message = str_replace("!", "", $message);
foreach ($this->getServer()->getOnlinePlayers() as $players) {
$players->sendMessage("§c[G] §r" . $player->getNameTag() . "§7:§f " . $message);
}
} else {
foreach ($this->getServer()->getOnlinePlayers() as $players) {
if ($players->getPosition()->distance($player->getPosition()) < 100) {
$players->sendMessage("§e[L] §r" . $player->getNameTag() . "§7:§f " . $message);
}
}
}
$event->cancel();
}
да ну и кстати. Если ивент будет отменён, сообщение всё равно отправится.
а вот это уже явно не моя проблема, я предоставил плагин на локальный/глобальный чат, а вот что игроки ставят, явно не моя проблема
хотите лучше - пишите сами
тогда не выставляй это на показ
можно же было добавить просто поддержку PureChat, и на этом можно было закончить
ничего что purechat это во первых помойка, а во вторых он вообще для PMMP4?
мне это говорит человек, который не смог нормально сделать плагин на глобальный и локальный чат
ну напиши лучше, в чем проблема?
или ты хочешь чтобы тебе за бесплатно делали весь сервер?
$event->setFormat('[G] ' . $event->getFormat());
по моему так?
нет
пон
круто наверно событию отправлять сообщение?
у меня и так фулл самопис сборка есть, зачем мне что-то от тебя?
<?php
namespace Plugin\PureChatMOD;
use pocketmine\plugin\PluginBase;
use pocketmine\utils\TextFormat as CLR;
use pocketmine\event\Listener;
use pocketmine\event\player\PlayerChatEvent;
use pocketmine\Player;
use pocketmine\command\ConsoleCommandSender;
class PureChatMOD extends PluginBase implements Listener {
/** @var string */
private $L;
private $G;
private $begin_L;
private $begin_G;
private $cache;
/** @var int */
private $radius;
private $begin_L_len;
private $begin_G_len;
/** @var ConsoleCommandSender */
private $server;
public function onEnable() {
$this->prepareData();
$this->server = new ConsoleCommandSender;
$this->getServer()->getPluginManager()->registerEvents($this, $this);
}
/**
* @param PlayerChatEvent $e
* @priority LOWEST
*/
public function partOne(PlayerChatEvent $e) {
$msg = $e->getMessage();
if (substr($msg, 0, $this->begin_G_len) === $this->begin_G) {
$e->setMessage(substr($msg, $this->begin_G_len));
$this->cache = $this->G;
} elseif (substr($msg, 0, $this->begin_L_len) === $this->begin_L) {
$e->setMessage(substr($msg, $this->begin_L_len));
$sendTo = [$this->server];
$sender = $e->getPlayer();
$x = $sender->getFloorX();
$y = $sender->getFloorY();
$z = $sender->getFloorZ();
$r = $this->radius;
foreach ($sender->getLevel()->getPlayers() as $player) {
if (
($x - $r) <= $player->getX() && ($x + $r) >= $player->getX() &&
($y - $r) <= $player->getY() && ($y + $r) >= $player->getY() &&
($z - $r) <= $player->getZ() && ($z + $r) >= $player->getZ()
) {
$sendTo[] = $player;
}
}
$e->setRecipients($sendTo);
$this->cache = $this->L;
} else {
$this->cache = '';
}
}
/**
* @param PlayerChatEvent $e
* @priority HIGHEST
*/
public function partTwo(PlayerChatEvent $e) {
$e->setFormat($this->cache . $this->getServer()->getLanguage()->translateString($e->getFormat(), [$e->getPlayer()->getDisplayName(), $e->getMessage()]));
}
private function prepareData() {
@mkdir($path = $this->getDataFolder());
$defaultConfig = stream_get_contents($this->getResource($file = 'config.yml'));
$defaultData = yaml_parse($defaultConfig);
if (!file_exists($path .= $file)) {
file_put_contents($path, $defaultConfig);
$data = $defaultData;
} else {
$newData = @yaml_parse(file_get_contents($path));
if (!is_array($newData) || empty($newData)) {
$this->getLogger()->warning('Файл с настройками был повреждён. Он будет ввостановлен в начальный вид');
file_put_contents($path, $defaultConfig);
$data = $defaultData;
} else {
$data = array_replace($defaultData, $newData);
}
}
$this->L = (string) $data['local'];
$this->G = (string) $data['global'];
$this->radius = (int) $data['radius'];
$this->begin_L = (string) $data['begin-local'];
$this->begin_G = (string) $data['begin-global'];
$this->begin_L_len = strlen($this->begin_L);
$this->begin_G_len = strlen($this->begin_G);
}
}
что это
ExtraGL, или хз твой плагин, только лучше
и зачем оно тут нужно
ну так у меня тоже фулл самопис сборка на PMMP5, все прекрасно работает, я не юзаю парашные purechat и тд, я пишу это сам. и лишь решил поделиться с теми, кто вообще даже ЭТОГО не умеют, если ты думаешь что вокруг тебя вращается мир, то это не так