WikiExamples

Примеры планирования задач


⏰ Примеры планирования задач

Готовые примеры использования планировщика задач в ScriptsLab.


Таймер с задержкой

Выполняет код один раз после указанной задержки.

/**
 * Scheduler.runLater - Выполнить один раз
 * 
 * 20 тиков = 1 секунда
 */

Console.log('Запускаем отложенную задачу...');

// Выполнить через 5 секунд (100 тиков)
Scheduler.runLater(function() {
    Server.broadcast('§eСообщение через 5 секунд!');
    Console.log('Отложенная задача выполнена');
}, 100);

Console.log('Задача запланирована');

Повторяющаяся задача

Выполняет код через равные промежутки времени.

/**
 * Scheduler.runTimer - Повторяющаяся задача
 */

var counter = 0;

// Выполнять каждую секунду (20 тиков)
var taskId = Scheduler.runTimer(function() {
    counter++;
    Server.broadcast('§eСчётчик: ' + counter);
    
    if (counter >= 10) {
        // Остановить после 10 выполнений
        // Примечание: в текущей версии нужно реализовать отмену
        Console.log('Задача завершена');
    }
}, 0, 20); // 0 = начать сразу, 20 = каждую секунду

Console.log('Повторяющаяся задача запущена, ID: ' + taskId);

Автоматические объявления

Показывает разные сообщения через определённые интервалы.

/**
 * Автоматические объявления
 */

var messages = [
    '§6[Объявление] §eНе забудьте проголосовать за сервер!',
    '§6[Объявление] §eПосетите наш Discord!',
    '§6[Объявление] §eИспользуйте §a/fly §eдля полёта!',
    '§6[Объявление] §eИспользуйте §a/heal §eдля лечения!'
];

var currentIndex = 0;

// Отправлять каждые 5 минут (6000 тиков)
Scheduler.runTimer(function() {
    Server.broadcast(messages[currentIndex]);
    currentIndex = (currentIndex + 1) % messages.length;
}, 100, 6000); // 100 = первое через 5 секунд, 6000 = каждые 5 минут

Console.log('Автоматические объявления запущены');

Автосохранение

Автоматически сохраняет данные игроков.

/**
 * Автосохранение данных
 */

Console.log('Запускаем автосохранение...');

// Выполнять каждые 5 минут
Scheduler.runTimer(function() {
    var online = Server.getOnlinePlayers();
    
    if (online.size() > 0) {
        // Сохранение данных каждого игрока
        for (var i = 0; i < online.size(); i++) {
            var player = online.get(i);
            var key = 'player.' + player.getUniqueId() + '.lastsave';
            
            Storage.save(key, Date.now());
        }
        
        Console.log('Сохранено данных для ' + online.size() + ' игроков');
    }
}, 0, 6000); // Каждые 5 минут

Console.log('Автосохранение настроено');

Обратный отсчёт

Запускает обратный отсчёт.

/**
 * Обратный отсчёт до события
 */

var seconds = 10;

var countdown = Scheduler.runTimer(function() {
    if (seconds > 0) {
        Server.broadcast('§eОсталось: ' + seconds + ' секунд');
        seconds--;
    } else {
        Server.broadcast('§aВремя вышло!');
        // Здесь код после окончания
        Console.log('Обратный отсчёт завершён');
    }
}, 0, 20); // Каждую секунду

Console.log('Обратный отсчёт запущен');

Проверка онлайна

Регулярно проверяет количество игроков.

/**
 * Проверка онлайна
 */

var checkInterval = function() {
    var players = Server.getOnlinePlayers();
    Console.log('Онлайн: ' + players.size() + ' игроков');
    
    // Проверка минимального онлайна
    if (players.size() === 0) {
        Console.log('На сервере нет игроков!');
    }
};

// Проверять каждые 2 минуты
Scheduler.runTimer(function() {
    checkInterval();
}, 0, 2400);

Console.log('Проверка онлайна настроена');

Напоминание о правилах

Напоминает правила через определённые промежутки.

/**
 * Напоминание о правилах
 */

var reminders = [
    '§eПомните о правилах сервера: §aNo Griefing!',
    '§eНе спамьте в чате!',
    '§eУважайте других игроков!',
    '§eСмотрите §a/help §eдля списка команд'
];

var index = 0;

// Каждые 10 минут
Scheduler.runTimer(function() {
    Server.broadcast(reminders[index]);
    index = (index + 1) % reminders.length;
}, 0, 12000);

Console.log('Напоминания настроены');

Арена PvP - таймер раунда

Управляет раундами на арене.

/**
 * Таймер раунда на арене PvP
 */

var roundTime = 300; // 5 минут в секундах (тиках)
var isRoundActive = false;

var roundTimer = Scheduler.runTimer(function() {
    if (!isRoundActive) {
        return;
    }
    
    roundTime--;
    
    // Показывать оставшееся время
    if (roundTime === 60) {
        Server.broadcast('§eДо конца раунда: §c1 минута!');
    } else if (roundTime === 30) {
        Server.broadcast('§eДо конца раунда: §c30 секунд!');
    } else if (roundTime <= 10 && roundTime > 0) {
        Server.broadcast('§c' + roundTime + '...');
    } else if (roundTime === 0) {
        Server.broadcast('§cРаунд завершён!');
        isRoundActive = false;
        
        // Завершение раунда
    }
}, 0, 1); // Каждую секунду

// Функция старта раунда
var startRound = function() {
    roundTime = 300;
    isRoundActive = true;
    Server.broadcast('§aРаунд начался! Удачи!');
};

Console.log('Таймер арены настроен');

Интервал между тиками

Интервал (тиков)ВремяИспользование
201 секундаБыстрые проверки
1005 секундСообщения
60030 секундСредние задачи
12001 минутаАвтосохранение
60005 минутОбъявления
1200010 минутНапоминания

Отмена задачи

Примечание: В текущей версии отмена задач требует дополнительной реализации. Сохраняйте ID задачи для будущей отмены.

// Сохраняем ID задачи
var taskId = Scheduler.runTimer(function() {
    // Код
}, 0, 20);

// Для отмены (требует реализации в будущем)
// Scheduler.cancel(taskId);

Лучшие практики

  1. Не выполняйте тяжёлые операции в таймерах - используйте runLater для отложенных задач

  2. Проверяйте онлайн перед отправкой - избегайте ошибок при отсутствии игроков

  3. Используйте осмысленные интервалы - не нагружайте сервер слишком частыми задачами

  4. Логируйте важные события - записывайте выполнение задач в консоль


Следующие шаги

ШагОписание
КомандыПримеры команд
СобытияОбработка событий
ПредметыКастомные предметы

⏰ Scheduler Examples (English)

Ready-to-use task scheduling examples for ScriptsLab.


Delayed Task

Executes code once after specified delay.

/**
 * Scheduler.runLater - Execute once
 * 
 * 20 ticks = 1 second
 */
Console.log('Starting delayed task...');

// Execute after 5 seconds (100 ticks)
Scheduler.runLater(function() {
    Server.broadcast('§eMessage after 5 seconds!');
    Console.log('Delayed task executed');
}, 100);

Console.log('Task scheduled');

Repeating Task

Executes code at regular intervals.

/**
 * Scheduler.runTimer - Repeating task
 */
var counter = 0;

// Execute every second (20 ticks)
var taskId = Scheduler.runTimer(function() {
    counter++;
    Server.broadcast('§eCounter: ' + counter);
    
    if (counter >= 10) {
        // Stop after 10 executions
        // Note: needs implementation in current version
        Console.log('Task completed');
    }
}, 0, 20); // 0 = start immediately, 20 = every second

Console.log('Repeating task started, ID: ' + taskId);

Auto Broadcasts

Shows different messages at regular intervals.

/**
 * Auto broadcasts
 */
var messages = [
    '§6[Broadcast] §eDon\'t forget to vote for the server!',
    '§6[Broadcast] §eJoin our Discord!',
    '§6[Broadcast] §eUse §a/fly §e for flight!',
    '§6[Broadcast] §eUse §a/heal §e to heal!'
];

var currentIndex = 0;

// Broadcast every 5 minutes (6000 ticks)
Scheduler.runTimer(function() {
    Server.broadcast(messages[currentIndex]);
    currentIndex = (currentIndex + 1) % messages.length;
}, 100, 6000); // 100 = first after 5 sec, 6000 = every 5 min

Console.log('Auto broadcasts started');

Auto Save

Automatically saves player data.

/**
 * Auto save data
 */
Console.log('Starting auto save...');

// Every 5 minutes
Scheduler.runTimer(function() {
    var online = Server.getOnlinePlayers();
    
    if (online.size() >0) {
        // Save each player's data
        for (var i = 0; i < online.size(); i++) {
            var player = online.get(i);
            var key = 'player.' + player.getUniqueId() + '.lastsave';
            
            Storage.save(key, Date.now());
        }
        
        Console.log('Saved data for ' + online.size() + ' players');
    }
}, 0, 6000); // Every 5 minutes

Console.log('Auto save configured');

Countdown Timer

Starts a countdown.

/**
 * Countdown to event
 */
var seconds = 10;

var countdown = Scheduler.runTimer(function() {
    if (seconds >0) {
        Server.broadcast('§eTime left: ' + seconds + ' seconds');
        seconds--;
    } else {
        Server.broadcast('§aTime is up!');
        // Code after countdown ends here
        Console.log('Countdown completed');
    }
}, 0, 20); // Every second

Console.log('Countdown started');

Online Check

Regularly checks player count.

/**
 * Check online status
 */
var checkInterval = function() {
    var players = Server.getOnlinePlayers();
    Console.log('Online: ' + players.size() + ' players');
    
    // Check minimum online
    if (players.size() === 0) {
        Console.log('No players on server!');
    }
};

// Check every 2 minutes
Scheduler.runTimer(function() {
    checkInterval();
}, 0, 2400);

Console.log('Online check configured');

Rule Reminders

Reminds rules at intervals.

/**
 * Rule reminders
 */
var reminders = [
    '§eRemember server rules: §aNo Griefing!',
    '§eDon\'t spam in chat!',
    '§eRespect other players!',
    '§eCheck §a/help §e for commands'
];

var index = 0;

// Every 10 minutes
Scheduler.runTimer(function() {
    Server.broadcast(reminders[index]);
    index = (index + 1) % reminders.length;
}, 0, 12000);

Console.log('Reminders configured');

PvP Arena - Round Timer

Manages rounds in arena.

/**
 * PvP Arena round timer
 */
var roundTime = 300; // 5 minutes in seconds (ticks)
var isRoundActive = false;

var roundTimer = Scheduler.runTimer(function() {
    if (!isRoundActive) {
        return;
    }
    
    roundTime--;
    
    // Show remaining time
    if (roundTime === 60) {
        Server.broadcast('§eRound ends in: §c1 minute!');
    } else if (roundTime === 30) {
        Server.broadcast('§eRound ends in: §c30 seconds!');
    } else if (roundTime <= 10 && roundTime >0) {
        Server.broadcast('§c' + roundTime + '...');
    } else if (roundTime === 0) {
        Server.broadcast('§cRound over!');
        isRoundActive = false;
        
        // End round logic here
    }
}, 0, 1); // Every second

// Function to start round
var startRound = function() {
    roundTime = 300;
    isRoundActive = true;
    Server.broadcast('§aRound started! Good luck!');
};

Console.log('Arena timer configured');

Tick Intervals

Interval (ticks)TimeUsage
201 secondQuick checks
1005 secondsMessages
60030 secondsMedium tasks
12001 minuteAuto save
60005 minutesBroadcasts
1200010 minutesReminders

Task Cancellation

Note: In current version, task cancellation requires additional implementation. Save task ID for future cancellation.

// Save task ID
var taskId = Scheduler.runTimer(function() {
    // Code
}, 0, 20);

// To cancel (requires implementation in future)
// Scheduler.cancel(taskId);

Best Practices

  1. Don't execute heavy operations in timers - use runLater for delayed tasks

  2. Check online before sending - avoid errors when no players

  3. Use meaningful intervals - don't overload server with too frequent tasks

  4. Log important events - record task execution to console


Next Steps

StepDescription
CommandsCommand examples
EventsEvent handling
ItemsCustom items

Last updated Apr 29, 2026, 6:37 AM
Edit