Здравствуйте, это снова я и мой кликер. У меня тут проблема…
$this->getServer()->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "CT"], [$player]), 6000); //Не тот код скинул
Если плагин заметит что игрок пользуется авто-кликером то ему выдаётся КТ и он не может продолжать кликать (запускается таск), но если он введёт специальную команду то КТ тут же должен сняться, и вот вопрос… А как прервать работу таска?
MELVI
20.Сентябрь.2022 14:51:51
2
$this->getServer()->getScheduler()->cancelTask($task->getTaskId());
И вот ещё вопрос, он прервет весь таск? (То есть КТ снимяться у всех игроков сразу?)
отмена задачи лишь убирает её из очереди планировщика, нигде ни у кого ничего не снимется
если задача вызывала какой-нибудь sendTip(), естественно он пропадет на клиенте по таймауту
Допустим у Игрока1 КД на 5000 тиков
А у Игрока2 КД на 2000 тиков
А Игроку3 таск только запустили (6000 тиков)
И у каждого должен быть отдельный таск, а как это реализовать? Просто перед созданием темы я чуток неправильно объяснил
$task->getHandler()->remove();
public function cancel(){
И
public function remove(){
Какой использовать?
И то и то подходит, только cancel() вызовит дополнительную функцию onCancel(), remove() сразу удалит хандлер
Ты то понял как использовать?
На примере из кода выше
// Создаем
$task = new CallbackTask([$this, "CT"], [$player]);
$this->getServer()->getScheduler()->scheduleDelayedTask($task, 6000);
$this->tasks[$player->getName()] = $task;
// Удаляем
if(isset($this->tasks[$player->getName()])){
$this->tasks[$player->getName()]->getHandler()->remove();
unset($this->tasks[$player->getName()]);
}
Не советую использовать таски для установки таймацта на что-либо, потому что тпс сервера всегда скачет и значения могут быть не точными
2 лайка
Какие нах конфиги… В массив записываешь имя игрока => текущее время unix + cooldown в секундах. Потом проверяешь при каком-либо действии и все
_ _
_ __ __ _| |_| |_
| '_ \ / _` | __| __|
| |_) | (_| | |_| |_
| .__/ \__,_|\__|\__|
|_|