Описание: При установке данного плагина каждый час на сервере происходит охота на игрока, игрок должен продержаться час чтобы его не убили, если убьют — охотник получит 20 алмазов, если игрок выживет — получает 20 алмазов!
<?php
namespace Wanted;
use pocketmine\player\Player;
use pocketmine\Plugin\PluginBase;
use pocketmine\Server;
use pocketmine\event\Listener;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\utils\Config;
use pocketmine\utils\TextFormat;
use pocketmine\scheduler\Task;
use pocketmine\item\Item;
use pocketmine\entity\Effect;
use pocketmine\entity\EffectInstance;
class Base extends PluginBase implements Listener{
public function onEnable(): void {
$this->getServer()->getPluginManager()->registerEvents($this, $this);
//Начать задание охоты
$this->getScheduler()->scheduleRepeatingTask(new HuntingTask($this), 72000); //Выполнять каждые 1 час (20 тиков * 3600 секунд)
}
public function onHuntStart(Player $player){
//Применить эффект скорости к игроку
$player->addEffect(new EffectInstance(Effect::getEffect(Effect::SPEED), 72000, 0, false)); //Продолжительность: 1 час (20 тиков * 3600 секунд)
//Выделение игрока
$player->setNameTag(TextFormat::RED . $player->getName()); //Сделать тег имени игрока красным
$player->sendMessage(TextFormat::YELLOW . "[SpacePlugins] Теперь за тобой охотятся! Продержитесь 1 час, чтобы получить в награду 20 алмазов.");
}
public function onHuntEnd(Player $hunter, Player $hunted){
//Убрать эффект скорости с преследуемого игрока
$hunted->removeEffect(Effect::SPEED);
//Убрать выделение с преследуемого игрока
$hunted->setNameTag($hunted->getName()); //Reset the player's name tag
// награда охотнику
$hunter->getInventory()->addItem(Item::get(Item::DIAMOND, 0, 20));
$hunter->sendMessage(TextFormat::GREEN . "[SpacePlugins] Вы успешно охотились на " . $hunted->getName() . " и получили награду в 20 алмазов");
}
}
class HuntingTask extends Task{
private $plugin;
public function __construct(Base $plugin){
$this->plugin = $plugin;
}
public function onRun(): void {
$players = $this->plugin->getServer()->getOnlinePlayers();
if(count($players) > 1){
//Выбор случайного игрока для охоты
$hunted = $players[array_rand($players)];
//Уведомить всех игроков о преследуемом игроке
$message = TextFormat::YELLOW . $hunted->getName() . " сейчас идет охота! Убейте его, чтобы получить награду в 20 алмазов!";
$this->plugin->getServer()->broadcastMessage($message);
//Начать охоту на выбранного игрока
$this->plugin->onHuntStart($hunted);
//Планирование окончания охоты
$this->plugin->getScheduler()->scheduleDelayedTask(new HuntingEndTask($this->plugin, $hunted), 72000); //Выполнение каждый 1 час (20 тиков * 3600 секунд)
}
}
}
Типа игрок зашёл на 10 минутак на сервер, собрать например с фермы еду и посадить новую, в этот момент рандом выбирает его жертвой. Мало того что игрок в регионе своем может быть. Так ещё он просто выйдет и сервер упадет